第四章 陣列的基本操作與運算
DESCRIPTION
第四章 陣列的基本操作與運算. 本章學習目標 認識陣列裡元素的結構 學習多維陣列的建立 學習編修矩陣的內容 學習基本的矩陣數學運算. 向量元素的操作 (1/2). 向量元素的操作 (2/2). 矩陣元素的操作 (1/2). 矩陣元素的操作 (2/2). 矩陣的索引值之結構. Matlab 的矩陣是利用「以行為主」的結構來儲存 每一個陣列可以看成是由數個行向量串接而成 存取矩陣的元素時,可以使用一維或二維索引值來存取. 矩陣的索引值的範例. 矩陣元陣的提取. 矩陣元陣提取的範例. 一維與二維索引值的轉換. 多維陣列. - PowerPoint PPT PresentationTRANSCRIPT
第四章 陣列的基本操作與運算
本章學習目標 • 認識陣列裡元素的結構• 學習多維陣列的建立• 學習編修矩陣的內容• 學習基本的矩陣數學運算
1
2
向量元素的操作 (1/2) >> v1=[6 7 8 9]v1 = 6 7 8 9
>> 2*v1+1ans = 13 15 17 19
>> v1(2)ans = 7
>> v1([2,4])ans = 7 9
>> v1([2 4])ans = 7 9
>> v1(:)ans = 6 7 8 9
>> v1([2])ans = 7
>> v1(3)=0v1 = 6 7 0 9
>> v1(5)??? Index exceeds matrix dimensions.
3
向量元素的操作 (2/2)
>> v1(7)=12v1 = 6 7 0 9 0 0 12
>> v1(3:5)=1v1 = 6 7 1 1 1 0 12
>> v1(end)ans = 12
>> v1(end-1)ans = 0
>> v1(1:2:end)ans = 6 1 1 12
>> v1(end:-1:1)ans = 12 0 1 1 1 7 6
>> v1(6)=[]v1 = 6 7 1 1 1 12
>> v1(5:end)=[]v1 = 6 7 1 1
4
矩陣元素的操作 (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])ans = 9 10 11
>> M(3,1:3)ans = 9 10 11
>> M(3,:)ans = 9 10 11 12
>> M(end,3)ans = 11
>> M(1:2,4)ans = 4 8
>> M(:,2:3)ans = 2 3 6 7 10 11
>> M(end,2:3)ans = 10 11
5
矩陣元素的操作 (2/2)
>> M(2,3)=99M = 1 2 3 4 5 6 99 8 9 10 11 12
>> M(end,:)=[]M = 1 2 3 4 5 6 99 8
>> M(:,[2,4])=[]M = 1 3 5 99
>> M(1,2)=[]Subscripted assignment dimension
mismatch.
>> M=[M,[4;7]]M = 1 3 4 5 99 7
>> M=[[8,9,10];M]M = 8 9 10 1 3 4 5 99 7
>> M(3:-1:1,:)ans = 5 99 7 1 3 4 8 9 10
>> M(2,:)=0M = 8 9 10 0 0 0 5 99 7
6
矩陣的索引值之結構 • Matlab 的矩陣是利用「以行為主」的結構來儲存• 每一個陣列可以看成是由數個行向量串接而成• 存取矩陣的元素時,可以使用一維或二維索引值來存取
7
> M([4 6;8 9])ans = 6 4 9 3
>> M(:)ans = 3 7 0 6 4 4 4 9 3 3 8 1
矩陣的索引值的範例>> M=[3 6 4 3;7 4 9 8;0 4 3 1]M = 3 6 4 3 7 4 9 8 0 4 3 1
>> M(2,3)ans = 9
>> M(8)ans = 9
>> M(4:7)ans = 6 4 4 4
>> M([5;7;9])ans = 4 4 3
矩陣元陣的提取
8
9
>> M([1,3],[1,3,4])ans = 3 4 3 0 3 1
>> M(2:3,1:2)ans = 7 4 0 4
>> M(4:6)=0M = 3 0 4 3 7 0 9 8 0 0 3 1
>> M(2:3,2:4)=1M = 3 0 4 3 7 1 1 1 0 1 1 1
>> M([4,8,12])=[]M = 3 7 0 1 1 4 1 3 1
矩陣元陣提取的範例
10
對於一個m n 的矩陣 M而言,二維索引值 ( , )i j 和一維索引值 k之間的關係可用下面的公式來表示:
( ) ( ( 1) )M k M i j m
例如,若陣列 M 的維度為 3 4 ,則第二列第三行的元素 M(2,3),換成以一維的索引值來表示時,可換算得
( ) (2 (3 1) 3) (8)M k M M
11
一維與二維索引值的轉換
>> ind=sub2ind([3,4],2,3)ind = 8
>> [row,col]=ind2sub([3,4],8)row = 2col = 3
>> [row,col]=ind2sub([3,4],[8,4,12])row = 2 1 3col = 3 2 4
>> ind=sub2ind([3,4],row,col)ind = 8 4 12
12
多維陣列 • 陣列的維度多於二維,稱為多維陣列• 三維陣來必須以列、行與頁三個維度來描述
建立三維陣列的範例
13
>> A(:,:,1)=[1 2 3 4;5 6 7 8;9 10 11 12]
A = 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) = 1 2 3 4 5 6 7 8 9 10 11 12A(:,:,2) = 7 4 2 1 6 1 5 2 3 1 4 5
>> size(A)ans = 3 4 2
>> ndims(A)ans = 3
>> numel(A)ans = 24
>> A(11:14)ans = 8 12 7 6
>> A(1,3,2)ans = 2
14
常用的陣列建立函數
15
>> zeros(3)ans = 0 0 0 0 0 0 0 0 0
>> zeros(2,3)ans = 0 0 0 0 0 0
>> ones(3,2)ans = 1 1 1 1 1 1
>> eye(4)ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
>> eye(3,4)ans = 1 0 0 0 0 1 0 0 0 0 1 0
>> diag([1 2 3])ans = 1 0 0 0 2 0 0 0 3
>> magic(3)ans = 8 1 6 3 5 7 4 9 2
>> magic(4)ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
陣列建立函數使用範例
16
建立亂數陣列
17
>> randi(9,[2,5])ans = 2 4 2 3 2 5 8 4 7 8
>> randi([0,1],[1,6])ans = 0 1 1 1 0 0
>> rand()ans = 0.9501
>> rand(3)ans = 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
>> rng(999)
>> randi(9,[1,2])ans = 8 5
>> randi(9,[1,1])ans = 2
>> randi(9,[1,3])ans = 6 1 3
亂數陣列的使用範例
測試亂數分佈的情況
18
>> A=randn(1,10000);
>> hist(A,-4:0.2:4)
>> B=randi([1,24],[1,10000]);
>> hist(B,1:24)
陣列元素的提取
19
20
>> 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)'ans = 5 7 15
>> diag(A,2)ans = 3 8
>> triu(A,1)ans = 0 2 3 13 0 0 10 8 0 0 0 12 0 0 0 0
>> tril(A,-2)ans = 0 0 0 0 0 0 0 0 9 0 0 0 4 14 0 0
元素的提取的範例
21
陣列元素的重排
22
重排陣列元素的範例>> A=magic(3)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)ans = 6 1 8 7 5 3 2 9 4
>> reshape(A,1,9)ans = 8 3 4 1 5 9 6 7 2
>> reshape(A,2,4)Error using reshapeTo 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 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 9 9 9 9 9 9 9 9ans(:,:,2) = 9 9 9 9 9 9 9 9 9 9 9 9
23
陣列的合併
>> A=[1 2 3;3 4 5]A = 1 2 3 3 4 5
>> B=2*AB = 2 4 6 6 8 10
>> [A,B]ans = 1 2 3 2 4 6 3 4 5 6 8 10
>> [A;B]ans = 1 2 3 3 4 5 2 4 6 6 8 10
24
>> cat(1,A,B)ans = 1 2 3 3 4 5 2 4 6 6 8 10
>> cat(2,A,B)ans = 1 2 3 2 4 6 3 4 5 6 8 10
>> cat(2,A,A,B)ans = 1 2 3 1 2 3 2 4 6 3 4 5 3 4 5 6 8 10
>> cat(3,A,B)ans(:,:,1) = 1 2 3 3 4 5ans(:,:,2) = 2 4 6 6 8 10
>> cat(4,A,B)ans(:,:,1,1) = 1 2 3 3 4 5ans(:,:,1,2) = 2 4 6 6 8 10
cat() 的使用範例
25
基本的矩陣運算
26
>> A=[2 4;3 1]A = 2 4 3 1
>> B=[3 2;4 6]B = 3 2 4 6
>> A+3ans = 5 7 6 4
>> A+Bans = 5 6 7 7
>> [2,3]*Aans = 13 11
>> A*[2,3]Error using * Inner matrix dimensions must agree.
>> A*[1;5]ans = 22 8
>> A*Bans = 22 28 13 12
>> A'ans = 2 3 4 1
矩陣運算的範例 (1/2)
27
>> inv(A)ans = -0.1000 0.4000 0.3000 -0.2000
>> det(A)ans = -10
>> M=expm(A)M = 84.8655 84.7302 63.5476 63.6830
>> logm(M)ans = 2.0000 4.0000 3.0000 1.0000
>> Z=sqrtm(A)ans = 1.2778+0.6061i 1.2778-0.8081i 0.9583-0.6061i 0.9583+0.8081i
>> Z^2ans = 2.0000+0.0000i 4.0000+0.0000i 3.0000-0.0000i 1.0000+0.0000i
>> real(Z^2)ans = 2.0000 4.0000 3.0000 1.0000
>> A^0.5ans = 1.2778+0.6061i 1.2778-0.8081i 0.9583-0.6061i 0.9583+0.8081i
>> A^-1ans = -0.1000 0.4000 0.3000 -0.2000
矩陣運算的範例 (2/2)
矩陣的左除與右除• 左除「 \ 」與右除「 / 」運算子,可分別用
AX=B與 XA=B 來計算:
28
表 3.5.2 矩陣的數學運算
指令 說 明
A\B A左除 B,此運算相當於把 A的反矩陣乘以 B,也就是 1A B
B/A B右除 A,此運算相當於把 B乘上 A的反矩陣,也就是 1BA
3-29
例如,設
AX B , 3 4
1 2A
,
10
4B
若要求解向量 X ,則
1 1 2 10 2
0.5 1.5 4 1X A B
上式可以寫上 X=inv(A)*B ,或用 A 來左除 B ,
即>> A\B
3-30
XA B3 4
1 2A
10 14B
1 1 210 14 3 1
0.5 1.5X BA
右除是用在另外的一種情況,例如,設
則
>> B/A
上式可以寫上 X=B*inv(A) ,或用 B 右除 A ,即
31
陣列元素對元素的運算
>> A=[2 4;3 1]A = 2 4 3 1
>> B=[3 2;4 6]B = 3 2 4 6
>> A*Bans = 22 28 13 12
>> A.*Bans = 6 8 12 6
>> A^3ans = 68 76 57 49
>> A.^3ans = 8 64 27 1
32
在Matlab裡,矩陣 A乘上 B可以寫成 A*B。例如,設
2 4 3 2, ;
3 1 4 6A B
則
2 4 3 2 2 3 4 4 2 2 4 6 22 28
*3 1 4 6 3 3 1 4 3 2 1 6 13 12
A B
如果是希望陣列 A內的元素乘上陣列 B內相對應的位置,也就是計算
2 4 3 2 2 3 4 2 6 8.*
3 1 4 6 3 4 1 6 12 6A B
則可以利用Matlab所提供的 "元素對元素"的計算指令
Exercises(1/2)
• Please rearrange
m to be and
• Please solve:
33
160015621561
804241
4021
m
140
15611600
m
16001201
4001
m
Exercises(2/2)
• 計算 函數值: ,
, 500 筆資料 ,並利用 PLOTS
標籤簡單繪製其圖形。
34
xx
xxy
cos)sin( 2
35
1510 x
【第六章】 - CMLab Graphicskez/c/Lecture6_Array.pdf · 求三數的最大值 (陣列 X 迴圈版) 迴圈與陣列是絕配!使用 陣列時請搭配迴圈服用 因為陣列的索引是由
Chapterepaper.gotop.com.tw/pdf/AEL021200.pdf · 列A 的第1 個元素、A(1) 表示陣列A 的第2 個元素;若要取得陣列的元 素個數,可以使用陣列的名稱與