本章學習目標 認識陣列裡元素的結構 學習多維陣列的建立 學習編修矩陣的內容 學習基本的矩陣數學運算 第四章 陣列的基本操作與運算 本章學習目標 認識陣列裡元素的結構 學習多維陣列的建立 學習編修矩陣的內容 學習基本的矩陣數學運算
向量元素的操作 (1/2) >> v1=[6 7 8 9] v1 = >> v1(:) 6 7 8 9 ans = 6 7 8 9 >> 2*v1+1 ans = 13 15 17 19 >> v1(2) 7 >> v1([2,4]) 7 9 >> v1([2 4]) >> v1(:) ans = 6 7 8 9 >> v1([2]) >> v1(3)=0 v1 = 6 7 0 9 >> v1(5) ??? Index exceeds matrix dimensions.
向量元素的操作 (2/2) >> v1(7)=12 v1 = >> v1(1:2:end) 6 7 0 9 0 0 12 >> v1(3:5)=1 6 7 1 1 1 0 12 >> v1(end) ans = 12 >> v1(end-1) >> v1(1:2:end) ans = 6 1 1 12 >> v1(end:-1:1) 12 0 1 1 1 7 6 >> v1(6)=[] v1 = 6 7 1 1 1 12 >> v1(5:end)=[] 6 7 1 1
矩陣元素的操作 (1/2) >> M=[1 2 3 4;5 6 7 8;9 10 11 12] M = 1 2 3 4 5 6 7 8 9 10 11 12 >> M(2,3) ans = 7 >> M(3,[1 2 3]) 9 10 11 >> M(3,1:3) 9 10 11 >> M(3,:) >> M(end,3) ans = 11 >> M(1:2,4) 4 8 >> M(:,2:3) 2 3 6 7 10 11 >> M(end,2:3)
矩陣元素的操作 (2/2) >> M=[M,[4;7]] M = >> M(2,3)=99 1 3 4 M = 1 3 4 5 99 7 >> M=[[8,9,10];M] 8 9 10 >> M(3:-1:1,:) ans = >> M(2,:)=0 0 0 0 >> M(2,3)=99 M = 1 2 3 4 5 6 99 8 9 10 11 12 >> M(end,:)=[] >> M(:,[2,4])=[] 1 3 5 99 >> M(1,2)=[] Subscripted assignment dimension mismatch.
矩陣的索引值之結構 Matlab的矩陣是利用「以行為主」的結構來儲存 每一個陣列可以看成是由數個行向量串接而成 存取矩陣的元素時,可以使用一維或二維索引值來存取
矩陣的索引值的範例 >> M=[3 6 4 3;7 4 9 8;0 4 3 1] M = 3 6 4 3 7 4 9 8 3 6 4 3 7 4 9 8 0 4 3 1 >> M(2,3) ans = 9 >> M(8) >> M(4:7) 6 4 4 4 >> M([5;7;9]) 4 3 > M([4 6;8 9]) ans = 6 4 9 3 >> M(:) 3 7 6 4 9 8 1
矩陣元陣的提取
矩陣元陣提取的範例 >> M([1,3],[1,3,4]) ans = 3 4 3 >> M(4:6)=0 3 4 3 0 3 1 >> M(2:3,1:2) 7 4 0 4 >> M(4:6)=0 M = 3 0 4 3 7 0 9 8 0 0 3 1 >> M(2:3,2:4)=1 7 1 1 1 0 1 1 1 >> M([4,8,12])=[] 3 7 0 1 1 4 1 3 1
一維與二維索引值的轉換 >> ind=sub2ind([3,4],2,3) ind = 8 >> [row,col]=ind2sub([3,4],8) row = 2 col = 3 >> [row,col]=ind2sub([3,4],[8,4,12]) row = 2 1 3 col = 3 2 4 >> ind=sub2ind([3,4],row,col) ind = 8 4 12
多維陣列 陣列的維度多於二維,稱為多維陣列 三維陣來必須以列、行與頁三個維度來描述
建立三維陣列的範例 >> A(:,:,1)=[1 2 3 4;5 6 7 8;9 10 11 12] 1 2 3 4 5 6 7 8 9 10 11 12 >> A(:,:,2)=[7 4 2 1;6 1 5 2;3 1 4 5] A(:,:,1) = A(:,:,2) = 7 4 2 1 6 1 5 2 3 1 4 5 >> size(A) ans = 3 4 2 >> ndims(A) 3 >> numel(A) 24 >> A(11:14) 8 12 7 6 >> A(1,3,2) 2
常用的陣列建立函數
陣列建立函數使用範例 >> eye(3,4) ans = 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 >> diag([1 2 3]) 1 0 0 0 2 0 0 0 3 >> magic(3) 8 1 6 3 5 7 4 9 2 >> magic(4) 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> zeros(3) ans = 0 0 0 >> zeros(2,3) >> ones(3,2) 1 1 >> eye(4) 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
建立亂數陣列
亂數陣列的使用範例 >> randi(9,[2,5]) >> rng(999) ans = 2 4 2 3 2 2 4 2 3 2 5 8 4 7 8 >> randi([0,1],[1,6]) 0 1 1 1 0 0 >> rand() 0.9501 >> rand(3) 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 0.4860 0.4565 0.4447 >> rng(999) >> R=randi(9,[1,8]) R = 8 5 2 6 1 3 4 5 >> randi(9,[1,2]) ans = 8 5 >> randi(9,[1,1]) 2 >> randi(9,[1,3]) 6 1 3
測試亂數分佈的情況 >> B=randi([1,24],[1,10000]); >> hist(B,1:24) >> A=randn(1,10000); >> B=randi([1,24],[1,10000]); >> hist(B,1:24) >> hist(A,-4:0.2:4)
陣列元素的提取
元素的提取的範例 >> diag(A,2) >> A=magic(4) ans = A = 3 16 2 3 13 8 >> triu(A,1) 0 2 3 13 0 0 10 8 0 0 0 12 0 0 0 0 >> tril(A,-2) 9 0 0 0 4 14 0 0 >> A=magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> diag(A) ans = 16 11 6 1 >> diag(A,-1)' 5 7 15
陣列元素的重排
重排陣列元素的範例 >> A=magic(3) >> reshape(A,2,4) A = 8 1 6 3 5 7 4 9 2 >> fliplr(A) ans = 6 1 8 7 5 3 2 9 4 >> flipdim(A,2) >> reshape(A,1,9) 8 3 4 1 5 9 6 7 2 >> reshape(A,2,4) Error using reshape To RESHAPE the number of elements must not change. >> repmat(A,2,2) ans = 8 1 6 8 1 6 3 5 7 3 5 7 4 9 2 4 9 2 >> repmat(9,[3,4,2]) ans(:,:,1) = 9 9 9 9 ans(:,:,2) =
陣列的合併 >> A=[1 2 3;3 4 5] A = 1 2 3 3 4 5 >> B=2*A B = 1 2 3 3 4 5 >> B=2*A B = 2 4 6 6 8 10 >> [A,B] ans = 1 2 3 2 4 6 3 4 5 6 8 10 >> [A;B] 1 2 3 3 4 5 2 4 6 6 8 10
cat() 的使用範例 >> cat(3,A,B) >> cat(1,A,B) ans(:,:,1) = ans = 1 2 3 3 4 5 ans(:,:,2) = 2 4 6 6 8 10 >> cat(4,A,B) ans(:,:,1,1) = ans(:,:,1,2) = >> cat(1,A,B) ans = 1 2 3 3 4 5 2 4 6 6 8 10 >> cat(2,A,B) 1 2 3 2 4 6 3 4 5 6 8 10 >> cat(2,A,A,B) 1 2 3 1 2 3 2 4 6 3 4 5 3 4 5 6 8 10
基本的矩陣運算
矩陣運算的範例 (1/2) >> [2,3]*A >> A=[2 4;3 1] ans = A = 13 11 13 11 >> A*[2,3] Error using * Inner matrix dimensions must agree. >> A*[1;5] 22 8 >> A*B 22 28 13 12 >> A' 2 3 4 1 >> A=[2 4;3 1] A = 2 4 3 1 >> B=[3 2;4 6] B = 3 2 4 6 >> A+3 ans = 5 7 6 4 >> A+B 5 6 7 7
矩陣運算的範例 (2/2) >> inv(A) ans = >> Z^2 -0.1000 0.4000 ans = -0.1000 0.4000 0.3000 -0.2000 >> det(A) -10 >> M=expm(A) M = 84.8655 84.7302 63.5476 63.6830 >> logm(M) 2.0000 4.0000 3.0000 1.0000 >> Z=sqrtm(A) 1.2778+0.6061i 1.2778-0.8081i 0.9583-0.6061i 0.9583+0.8081i >> Z^2 ans = 2.0000+0.0000i 4.0000+0.0000i 3.0000-0.0000i 1.0000+0.0000i >> real(Z^2) 2.0000 4.0000 3.0000 1.0000 >> A^0.5 1.2778+0.6061i 1.2778-0.8081i 0.9583-0.6061i 0.9583+0.8081i >> A^-1 -0.1000 0.4000 0.3000 -0.2000
矩陣的左除與右除 左除「\」與右除「/」運算子,可分別用AX=B與XA=B來計算:
例如,設 若要求解向量 X,則 上式可以寫上 X=inv(A)*B,或用 A 來左除 B,即 >> A\B
右除是用在另外的一種情況,例如,設 則 上式可以寫上 X=B*inv(A),或用 B 右除 A ,即 >> B/A
陣列元素對元素的運算 >> A.*B >> A=[2 4;3 1] ans = A = 2 4 6 8 3 1 2 4 3 1 >> B=[3 2;4 6] B = 3 2 4 6 >> A*B ans = 22 28 13 12 >> A.*B ans = 6 8 12 6 >> A^3 68 76 57 49 >> A.^3 8 64 27 1
Exercises(1/2) Please rearrange m to be and Please solve:
Exercises(2/2) 計算 函數值: , , 500筆資料 ,並利用PLOTS標籤簡單繪製其圖形。