5. 數組運算與矩陣運算
在MATLAB中,術語矩陣和數組在一般情況下是沒有差別的。嚴格地說,一個矩陣就是一個二維的數組,是用來進行線性代數運算的。MATLAB運用于矩陣上的數學運算符是以線性代數中的矩陣運算法則來進行計算的,而數組運算是基于兩個矩陣對應元素之間的,是以在MATLAB中,數組運算和矩陣運算是有差別的。
為了更清晰地表述數組運算和矩陣運算的差別,本節将二者相對應的指令清單進行對比,以說明其異同。表2-8列出了兩種運算指令形式和實質功能的差別。
表2-8 數組運算與矩陣運算的差別
【例2-11】 數組運算和矩陣運算的比較。
>> A=[1 2;3 4]; % 測試矩陣A
>> B=[4 3;2 1]; % 測試矩陣B
>> r1=100+A % 矩陣A加上一個常數
r1 =
101 102
103 104
>> r2_1=A*B % 兩個矩陣相乘,矩陣乘法
r2_1 =
8 5
20 13
>> r2_2=A.*B % 兩個矩陣相乘,數組乘法
r2_2 =
4 6
6 4
>> r3_1=AB % 矩陣左除
r3_1 =
-6.0000 -5.0000
5.0000 4.0000
>> r3_2=A.B % 數組除法
r3_2 =
4.0000 1.5000
0.6667 0.2500
>> r4_1=B/A % 矩陣右除
r4_1 =
-3.5000 2.5000
-2.5000 1.5000
>> r4_2=B./A % 數組除法
r4_2 =
4.0000 1.5000
0.6667 0.2500
>> r5_1=A.^2 % 數組幂
r5_1 =
1 4
9 16
>> r5_2=A^2 % 矩陣幂
r5_2 =
7 10
15 22
>> r6_1=2.^A % 數組幂
r6_1 =
2 4
8 16
6 矩陣的重構
6.1 矩陣元素的擴充與删除
MATLAB提供有對矩陣中的元素進行行或者列的擴充與删除的功能。
1.矩陣元素的擴充
将資料儲存在矩陣現有維數以外的元素中時,矩陣的尺寸會自動增加,以便容納下這個新元素。這個功能可以用來進行矩陣的擴充。
【例2-12】 矩陣的擴充。
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(6,7)=17
A =
16 2 3 13 0 0 0
5 11 10 8 0 0 0
9 7 6 12 0 0 0
4 14 15 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 17
>> A(:,8)=ones(6,1)
A =
16 2 3 13 0 0 0 1
5 11 10 8 0 0 0 1
9 7 6 12 0 0 0 1
4 14 15 1 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 17 1
本例中,A的原始矩陣并沒有A(6,7)這個元素,通過指派給A(6,7),矩陣A擴充成了一個6´7的新矩陣,其中未指派的擴充部分以0來填充。另外本例還說明了如何對矩陣的多個元素進行擴充指派,直接将一個列向量指派給了擴充部分。
2.矩陣元素的删除
通過将行或列指定為空矩陣[],即可從矩陣中删除行和列。
【例2-13】 矩陣的删除。
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(:,1)=[] % 删除矩陣A的第1列
A =
2 3 13
11 10 8
7 6 12
14 15 1
>> A(2,:)=[] % 删除矩陣A的第2行
A =
2 3 13
7 6 12
14 15 1
6.2 矩陣的重構
使用者可以通過矩陣旋轉,改變維數和截取部分元素來産生所需要的新矩陣。MATLAB提供了一些矩陣重構函數,如表2-9所示。
表2-9 常用的矩陣重構函數及說明
【例2-14】 矩陣的重構示例。
>> a=reshape(1:9,3,3) % 建立測試矩陣
>> a= [1,7;2,8;3,9;4,10;5,11;6,12] % 建立測試矩陣
a =
1 7
2 8
3 9
4 10
5 11
6 12
>> a = reshape(a,4,3) % 使用reshape改變a的形狀,
% 注意前後兩個a每一個單下标對應的元素是一緻的
a =
1 5 9
2 6 10
3 7 11
4 8 12
>> b=rot90(a,3) % 将矩陣a逆時針旋轉3×90°
b =
4 3 2 1
8 7 6 5
12 11 10 9>> c=fliplr(a) % 将矩陣a左右翻轉
c =
9 5 1
10 6 2
11 7 3
12 8 4>> d=flipud(a) % 将矩陣a上下翻轉
d =
4 8 12
3 7 11
2 6 10
1 5 9【例2-15】 矩陣部分元素的提取。
>> a=[1 2 3;4 5 6; 7 8 9] % 建立測試矩陣
a =
1 2 3
4 5 6
7 8 9
>> b=diag(a) % 求a的對角矩陣
b =
1
5
9
>> c=triu(a,1) % c矩陣第1條對角線及以上的元素取矩陣a的元素,其餘為0
c =
0 2 3
0 0 6
0 0 0
>> d=triu(a,2) % d矩陣第2條對角線及以上的元素取矩陣a的元素,其餘為0
d =
0 0 3
0 0 0
0 0 0
>> e=triu(a,-1) % e矩陣中除了第3行第1列元素為0,其餘元素都取自矩陣a的元素
e =
1 2 3
4 5 6
0 8 9
>> f=tril(a,-1) % 下三角矩陣的提取
f =
0 0 0
4 0 0
7 8 0