本节书摘来自异步社区出版社《MATLAB图像处理超级学习手册》一书中的第2章,第2.节,作者:MATLAB技术联盟 , 张岩 更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 MATLAB矩阵的运算
MATLAB图像处理超级学习手册
MATLAB中,矩阵的运算包括+(加)、-(减)、*(乘)、/(右除)、(左除)、^(乘方)等运算。下面对其进行介绍。
2.4.1 矩阵加减运算
假定有两个矩阵A和B,若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减即可,由A+B和A-B来实现矩阵的加减运算。
【例2-9】对矩阵A和B进行加减运算。
>>A=[5 4 6;8 9 7;3 6 4]
>>B=[9 1 7;5 6 6;5 6 8]
>>C=A+B
>>D=A-B
A =
5 4 6
8 9 7
3 6 4
B =
9 1 7
5 6 6
5 6 8
C =
14 5 13
13 15 13
8 12 12
D =
-4 3 -1
3 3 1
-2 0 -4
如果A与B的维数不相同时,例如:
>>A=[5 4 6;8 9 7;3 6 4]
B=[9 1 7;5 6 6;5 6 8;7 9 8]
C=A+B
D=A-B
则MATLAB将给出错误信息,Error: using+Matrix dimensions must agree。提示用户两个矩阵的维数不匹配。
2.4.2 矩阵乘法
假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则可以进行矩阵乘法的操作,即C=A*B为m×p矩阵。矩阵乘法需要被乘矩阵的列数与乘矩阵的行数相等。
【例2-10】矩阵的相乘。
>>A=[5 4 6;8 9 7;3 6 4]
>>B=[9 1 7 1;5 6 6 2;5 6 8 3]
>>C=A*B
A =
5 4 6
8 9 7
3 6 4
B =
9 1 7 1
5 6 6 2
5 6 8 3
C =
95 65 107 31
152 104 166 47
77 63 89 27
当矩阵相乘不满足被乘矩阵的列数与乘矩阵的行数相等时,例如:
>>A=[5 6;8 7;3 4]
B=[9 1 7 1;5 6 6 2;5 6 8 3]
C=A*B
则MATLAB将给出错误信息, Error: using * Matrix dimensions must agree。提示用户两个矩阵的维数不匹配。
2.4.3 矩阵除法
矩阵除法运算中,和/分别表示左除和右除。AB等效于A的逆左乘B矩阵,而B/A等效于A矩阵的逆右乘B矩阵。左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于矩阵运算,一般AB≠B/A。
【例2-11】矩阵除法。
>>clear
>>A=[5 4 6;8 9 7;3 6 4];
>>B=[9 ;1 ;7];
>>C=A\B
C =
-4.1538
-0.1154
5.0385
2.4.4 矩阵的乘方
若A为方阵,x为标量,则一个矩阵的乘方运算可以表示成A^x。
【例2-12】矩阵的乘方。
>>A=[5 4 6;8 9 7;3 6 4];
>>B=A^2
>>C= A^3
B =
75 92 82
133 155 139
75 90 76
C =
1357 1620 1422
2322 2761 2439
1323 1566 1384
若D不是方阵:
D= A=[5 4 6;8 9 7]
B=D^2
则MATLAB将给出错误信息“Error: The expression to the left of the equals sign is not a valid target for an assignment”。
**
2.4.5 矩阵的行列式**
矩阵的行列式是一个数值。在MATLAB中,det函数用于求方阵A所对应的行列式的值。
【例2-13】求矩阵的行列式。
>>A=[5 4 6;8 9 7;3 6 4]
>>det(A)
A =
5 4 6
8 9 7
3 6 4
ans =
52
2.4.6 矩阵的秩
矩阵线性无关的行数与列数称为矩阵的秩。在MATLAB中,rank函数用于求矩阵的秩。
【例2-14】求矩阵的秩。
>>A=[5 4 6;8 9 7;3 6 4]
>>rank(A)
A =
5 4 6
8 9 7
3 6 4
ans =
3
2.4.7 矩阵的逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得AB=BA=I(I 为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵。
求一个矩阵的逆是一件非常烦琐的工作,容易出错,但在MATLAB中,求一个矩阵的逆非常容易,inv函数用于求方阵的逆矩阵。
【例2-15】求矩阵的逆。
>>A=[1 2 3;5 5 6;7 7 9];
>>inv(A)
ans =
-1.0000 -1.0000 1.0000
1.0000 4.0000 -3.0000
0.0000 -2.3333 1.6667
2.4.8 矩阵的迹
矩阵的迹等于矩阵的特征值之和。在MATLAB中,trace函数用来求矩阵的迹。
【例2-16】求矩阵的迹。
>>A=[1 2 3;4 5 6;7 8 9]
>>rank(A)
A =
1 2 3
4 5 6
7 8 9
ans =
2
2.4.9 矩阵的范数及其计算函数
在MATLAB中,cond函数用于计算矩阵的范数。该函数的调用方法如下。
cond(A,1):表示计算A的1-范数下的条件数。
cond(A)或cond(A,2) :表示计算A的2-范数数下的条件数。
cond(A,inf):表示计算A的 ∞-范数下的条件数。
【例2-17】为求矩阵的范数。
>>A=[5 4 6;8 9 7;3 6 4];
X1=cond(A,1)
X2=cond(A)
X3=cond(A,inf)
运行结果如下:
X1 =
19
X2 =
14.9448
X3 =
24
2.4.10 矩阵的特征值与特征向量
在MATLAB中,eig函数用于计算矩阵的特征值和特征向量。该函数调用方法如下。
E=eig(A):表示求矩阵A的全部特征值,构成向量E。
[V,D]=eig(A):表示求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
[V,D]=eig(A, ‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后再求矩阵A的特征值和特征向量,而格式3是直接求矩阵A的特征值和特征向量的。
【例2-18】求矩阵的特征值和特征向量。
>>A=rand(3,3)
x1=eig(A)
[V,D]=eig(A)
Y1= V*A
Y2= V*D
运行结果如下:
A =
0.3922 0.7060 0.0462
0.6555 0.0318 0.0971
0.1712 0.2769 0.8235
x1 =
-0.4960
1.0481
0.6954
V =
0.6174 -0.4576 -0.3467
-0.7822 -0.3723 -0.2087
0.0841 -0.8075 0.9145
D =
-0.4960 0 0
0 1.0481 0
0 0 0.6954
Y1 =
-0.1171 0.3253 -0.3015
-0.5865 -0.6219 -0.2441
-0.3398 0.2869 0.6785
Y2 =
-0.3062 -0.4796 -0.2411
0.3879 -0.3902 -0.1451
-0.0417 -0.8463 0.6359