第四章 陣列的基本操作與運算 習題參考答案
4.1 陣列元素的處理
1. 設向量 v1=[6 8 1 9 7 2 7 8],試依下列題意作答:
(a) 取出向量 v1 的第 5 個元素。
(b) 取出向量 v1 的第 4~7 個元素。
(c) 查詢向量 v1 的長度(即元素的個數)
(d) 取出向量 v1 的第 3 個到最後一個元素。
(e) 將向量 v1 的元素反向排列,並將其結果設給另一向量 v2。
(f) 刪除向量 v2 的第 5~7 個元素。
(g) 將向量 v1 的第 5 個到最後一個元素的值設為 10。
Ans:
>> v1=[6 8 1 9 7 2 7 8]
v1 =
6 8 1 9 7 2 7 8 (a) >> v1(5)
ans = 7 (b) >> v1(4:7)
ans =
9 7 2 7 (c) >> length(v1)
ans = 8
(d) >> v1(3:end) ans =
1 9 7 2 7 8
(e) >> v2=v1(end:-1:1) v2 =
8 7 2 7 9 1 8 6 (f) >> v2(5:7)=[]
v2 =
8 7 2 7 6 (g) >> v1(5:end)=10
v1 =
6 8 1 9 10 10 10 10
2. 設矩陣 M=[1 2 3; 4 5 6; 7 8 9],試依下列題意依序作答:
(a) 取出矩陣 M 裡,第 1 列,第 3 行的元素。
(b) 取出矩陣 M 裡,第 2 列的第 1~2 個元素。
(c) 取出矩陣 M 第 1 列的所有元素。
(d) 取出矩陣 M 裡,最後一列的第 1 個與第 3 個元素。
(e) 在矩陣 M 的最右邊加上一個所有元素皆為 0 的行向量。
(f) 刪除矩陣 M 的最後一行。
(g) 取出矩陣 M 裡,第 1 列到第 2 列裡的第 1 到第 2 行的元素。
Ans:
>> M=[1 2 3; 4 5 6; 7 8 9]
M =
1 2 3 4 5 6 7 8 9 (a) >> M(1,3)
ans = 3
(b) >> M(2,[1 2]) ans =
4 5 (c) >> M(1,:)
ans =
1 2 3 (d) >> M(end,[1 3])
ans = 7 9 (e) >> M=[M,[0;0;0]]
M =
1 2 3 0 4 5 6 0 7 8 9 0 (f) >> M(:,end)=[]
M =
1 2 3 4 5 6 7 8 9 (g) >> M(1:2,1:2)
ans = 1 2 4 5
3. 設矩陣 M 的大小為 4 6 ,試利用 sub2ind() 指令以一維索引值來表示下列的陣列元素:
(a) M(1,2) (b) M(2,4) (c) M(3,5)
Ans:
(a) >> ind=sub2ind([4,6],1,2) ind =
5
(b) >> ind=sub2ind([4,6],2,4) ind =
14
(c) >> ind=sub2ind([4,6],3,5) ind =
19
4. 設矩陣 M 的大小為 5 7 ,試利用 ind2sub() 指令以二維索引值來表示下列的陣列元素:
(a) M(8) (b) M(10) (c) M(12)
Ans:
(a) >> [row,col]=ind2sub([5,7],8) row =
3 col = 2
(b) >> [row,col]=ind2sub([5,7],10) row =
5 col = 2
(c) >> [row,col]=ind2sub([5,7],12) row =
2 col = 3
5. 設矩陣 M=[1 3 4 7; 6 5 9 8]
(a) 試以一維索引值取出 M 的第 4,7,8 個元素。
(b) 試以二維索引值取出 M 的第 1~2 列,2~3 行的元素。
(c) 試將 M 的最後一行元素刪除。
Ans:
>> M=[1 3 4 7; 6 5 9 8]
M =
1 3 4 7 6 5 9 8 (a) >> M([4 7 8])
ans =
5 7 8 (b) >> M(1:2,2:3)
ans = 3 4 5 9 (c) >> M(:,end)=[]
M =
1 3 4 6 5 9
6. 設矩陣
1 2 3 4 5 6 7 8 9 10 11 12 M
,
(a) 試將矩陣 M 的每一列的元素反向排列,使其成為
9 10 11 12 5 6 7 8 1 2 3 4
。
(b) 試將矩陣 M 的每一行的元素反向排列,使其成為
4 3 2 1 8 7 6 5 12 11 10 9
。
Ans:
>> 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
(a) >> M(3:-1:1,:) ans =
9 10 11 12 5 6 7 8 1 2 3 4 (b) >> M(:,4:-1:1)
ans =
4 3 2 1 8 7 6 5 12 11 10 9
4.2 多維陣列
7. 設矩陣 M=[1 2 ; 4 5],試將矩陣 M 再加上一頁,使其變成 2 2 2 的三維陣列(新加入
的一頁,其元素值請設為0)。
Ans:
>> M=[1 2;4 5]
M =
1 2 4 5
>> M(:,:,2)=0 M(:,:,1) = 1 2 4 5 M(:,:,2) = 0 0 0 0
8. 試建立一個 2 2 3 2 的四維陣列 M,陣列裡所有的元素值皆為 1,並請利用 whos 指
令查詢陣列M 的維度,以及它所佔的位元組。
Ans:
>> M=ones(2,2,3,2) M(:,:,1,1) = 1 1 1 1
M(:,:,2,1) = 1 1 1 1 M(:,:,3,1) = 1 1 1 1 M(:,:,1,2) = 1 1 1 1 M(:,:,2,2) = 1 1 1 1 M(:,:,3,2) = 1 1 1 1
>> whos M
Name Size Bytes Class Attributes M 4-D 192 double
9. 設陣列 M 的大小為 3 4 2 :
(a) 陣列 M 的第 1 列,第 3 行,第 2 頁之一維索引值為何?
(b) 如果陣列 M 的一維索引值為 17,則其三維的索引值為何?
Ans:
>> M(:,:,1)=[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)=[13 14 15 16;17 18 19 20;21 22 23 24]
M(:,:,1) =
1 2 3 4 5 6 7 8 9 10 11 12 M(:,:,2) =
13 14 15 16 17 18 19 20 21 22 23 24
(a) >> M(1,3,2) ans = 15
>> M(19) ans = 15 (b) >> M(17)
ans = 18
>> M(2,2,2) ans = 18
4.3 常用的陣列建立指令
10. 試依序完成下列各題的要求:
(a) 試以 magic() 指令建立一個 5 5 的方陣,並將它設定給矩陣 A。
(b) 試以 eye() 指令建立一個 5 5 的單位矩陣,並將它設定給矩陣 B。
(c) 試將矩陣 B 轉成 logical 型態,並利用它取出矩陣 A 的對角線元素。
(d) 試以 Matlab 的語法驗證矩陣 A 的每一直行、每一橫列與對角線的總和均為 65。
Ans:
(a) >> A=magic(5) A =
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 (b) >> B=eye(5)
B =
1 0 0 0 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 (c) >> B=logical(B)
B =
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
>> A(B) ans = 17 5 13 21 9
(d) >> sum(A(B)) ans =
65
>> sum(A(1,:)) ans =
65
>> sum(A(2,:)) ans =
65
>> sum(A(3,:)) ans =
65
>> sum(A(4,:)) ans =
65
>> sum(A(5,:)) ans =
65
>> sum(A(:,1)) ans =
65
>> sum(A(:,2))
ans = 65
>> sum(A(:,3)) ans =
65
>> sum(A(:,4)) ans =
65
>> sum(A(:,5)) ans =
65
11. 試建立一個以向量 [1 2 3 4] 為對角線元素,其它元素為 0 的 4 4 矩陣。
Ans:
>> diag([1 2 3 4]) ans =
1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4
12. 試建立一個維度為 4 3 2 ,平均值為 0,標準差為 1 的常態分佈亂數。
Ans:
>> randn(4,3,2) ans(:,:,1) =
0.4889 0.2939 -1.0689 1.0347 -0.7873 -0.8095 0.7269 0.8884 -2.9443 -0.3034 -1.1471 1.4384
ans(:,:,2) =
0.3252 -0.1022 -0.8649
-0.7549 -0.2414 -0.0301 1.3703 0.3192 -0.1649 -1.7115 0.3129 0.6277
4.4 陣列元素的其它操作
13. 設 A 為 5 5 的魔術方陣,B 為 5 5 的單位矩陣,試依序回答下列各題:
(a) 試分別以陣列 A 與 B 為第 1 頁和第 2 頁,將 A 與 B 合併成一個 5 5 2 的陣列,
並把其結果設定給變數C。
(b) 計算矩陣 A B ,並把其結果與陣列 C 合併,使得 A B 是合併之後之矩陣的第 1 頁。合併後之矩陣的維度為多少?試利用 size() 指令驗證之。
Ans:
>> A=magic(5) A =
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
>> B=eye(5) B =
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 (a) >> C=cat(3,A,B)
C(:,:,1) =
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 C(:,:,2) =
1 0 0 0 0
0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 (b) >> cat(3,(A+B),C)
ans(:,:,1) =
18 24 1 8 15 23 6 7 14 16 4 6 14 20 22 10 12 19 22 3 11 18 25 2 10 ans(:,:,2) =
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 ans(:,:,3) =
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
>> size(cat(3,(A+B),C)) ans =
5 5 3
14. 設陣列 A=[1 2 3; 4 5 6],試回答下列問題:
(a) 試將陣列 A 順時針旋轉 90 度。
(b) 試將陣列 A 的元素上下翻轉。
(c) 試利用 reshape() 指令將陣列 A 的維度更改 3 2 的陣列。
(d) 將一維陣列 [7 8 9] 加到陣列 A 的第 3 列,使其成為 3 3 的陣列。
(e) 將一維陣列 [0; 0] 加到陣列 A 的第 4 行,使其成為 2 4 的陣列。
Ans:
(a) >> rot90(A,3) ans =
4 1 5 2 6 3 (b) >> flipud(A)
ans =
4 5 6 1 2 3 (c) >> reshape(A,3,2)
ans = 1 5 4 3 2 6 (d) >> [A;[7 8 9]]
A =
1 2 3 4 5 6 7 8 9 (e) >> [A,[0;0]]
ans =
1 2 3 0 4 5 6 0
15. 設陣列 A=[5; 4; 3],試利用 A 建立一個 3 12 的矩陣,其中矩陣A 第 1 列的元素值皆為 5,第 2 列的元素值皆為 4,第三列的元素值皆為 3。
Ans:
>> A=[5; 4; 3]
A = 5 4 3
>> repmat(A,1,12) ans =
5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3
4.5 矩陣的數學運算
16. 設陣列 A=[1 2; 4 5],B=[2 5; 0 1],試回答下列問題:
(a) 試計算 A 的 3 次方。
(b) 試計算 A 的反矩陣。
(c) 試驗證A A 1A1 ,其中 I 為 2 2A I 的單位矩陣。
(d) 試計算 *A B (即矩陣相乘)。
(e) 試計算 .*A B ,即把矩陣A 裡的每一個元素乘上矩陣 B 裡相同位置的元素。
Ans:
>> A=[1 2; 4 5]
A =
1 2 4 5
>> B=[2 5; 0 1]
B =
2 5 0 1 (a) >> A^3
ans = 57 78 156 213 (b) >> inv(A)
ans =
-1.6667 0.6667 1.3333 -0.3333 (c) >> A*A^-1
ans = 1 0 0 1
>> A^-1*A ans = 1 0 0 1 (d) >> A*B
ans = 2 7 8 25 (e) >> A.*B
ans = 2 10 0 5
17. 設矩陣 A=[2, 2; 3, 5],向量 B=[1, 2],試回答下列問題:
(a) 試計算向量 B 乘上矩陣 A。
(b) 試計算矩陣 A 乘上向量 B 的轉置。
Ans:
>> A=[2, 2; 3, 5]
A =
2 2 3 5
>> B=[1, 2]
B =
1 2 (a) >> B*A
ans = 8 12 (b) >> A*B'
ans = 6
13
18. 試求解下列的方程式:
(a) 1 (b)
2
1 2 4
1 6 0
x x
1 2
( , ) 3 2 (7, 12) x x 1 7
(c)
1 2 3
3 2 4 6
5 7 3 2
1 6 0 1
x x x
(d) 1 2 3
0 2 2
( , , ) 7 4 3 (17, 12, 16)
8 4 5
x x x
Ans:
(a) >> A=[-1 2;1 6]
A =
-1 2 1 6
>> B=[4;0]
B = 4 0
>> inv(A)*B ans = -3.0000 0.5000 (b) >> A=[3 2;1 7]
A =
3 2 1 7
>> B=[7 12]
B =
7 12
>> B*inv(A) ans =
1.9474 1.1579 (c) >> A=[3 2 4;5 7 3;1 6 0]
A =
3 2 4
5 7 3 1 6 0
>> B=[-6;2;1]
B = -6 2 1
>> inv(A)*B ans = 3.0455 -0.3409 -3.6136
(d) >> A=[0 2 -2;7 4 3;8 -4 -5]
A =
0 2 -2 7 4 3 8 -4 -5
>> B=[17 12 16]
B =
17 12 16
>> B*inv(A) ans =
-1.6303 3.1681 -0.6471