矩阵变换是指对一个矩阵进行某种运算与处理,其结果还是一个矩阵,包括求矩阵的对角阵、三角阵、转置矩阵,矩阵旋转,矩阵求逆等。
对角阵
只有对角线上有非0元素的矩阵称为对角阵,对角线上的元素相等的对角阵称为数量矩阵,"对角线上的元素都为1的对角阵称为单位矩阵。矩阵的对角线有许多性质,如转置运算时对角线元素不变,相似变换时对角线的和(称为矩阵的迹)不变等。在研究矩阵时,很多时候需要将矩阵的对角线上的元素提取出来形成一个列向量,而有时又需要用一个向量构造一个对角阵。
提取矩阵的对角线元素。设A为mxn矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有 min(m,n)个元素的列向量。
>> A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> D = diag(A)
D =
1
5
diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。与主对角线平行,往上为第1条、第2条、……、第n条对角线,往下为第-1条、第-2条、…、第-n条对角线。主对角线为第0条对角线。
>> A
A =
1 2 3
4 5 6
>> D1 = diag(A , 1)
D1 =
2
6
>> D2 = diag(A , -1)
D2 =
4
构造对角阵
设V为具有m个元素的向量,diag(V)将产生一个m×m对角阵,其主对角线元素即为向量V的元素。
>> diag([1,2,-1,4])
ans =
1 0 0 0
0 2 0 0
0 0 -1 0
0 0 0 4
diag(V)函数也有另一种形式 diag(V,k),其功能是产生一个nxn (n=m+|k|)对角阵,其第k条对角线的元素即为向量V的元素。
>> diag(1:3,-1)
ans =
0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0
例子:先建立5x5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,…,第五行乘以5.
用一个对角阵左乘一个矩阵时,相当于用对角阵的第1个元素乘以该矩阵的第一行,用对角阵的第2个元素乘以该矩阵的第二行,……,依此类推。因此,只需按要求构造一个对角阵D,并用D左乘A即可。
>> A = [17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;11,18,25,2,19];
>> D = diag(1:5);
>> D * A
ans =
17 0 1 0 15
46 10 14 28 32
12 0 39 0 66
40 48 76 84 12
55 90 125 10 95
如果要对A的每列元素乘以同一个数,可以用一个对角阵右乘矩阵 A。
三角阵
三角阵又进一步分为上三角阵和下三角阵。所谓上三角阵,是指矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。
上三角阵。与矩阵A对应的上三角阵B是与A同型的一个矩阵,并且B的对角线以上(含对角线)的元素和A对应相等,而对角线以下的元素等于0。求矩阵A的上三角阵的MATLAB函数是triu(A)。
>> A = [7,13,-28;2,-9,8;0,34,5]
A =
7 13 -28
2 -9 8
0 34 5
>> B = triu(A)
B =
7 13 -28
0 -9 8
0 0 5
triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。
>> A
A =
7 13 -28
2 -9 8
0 34 5
>> B = triu(A , 1)
B =
0 13 -28
0 0 8
0 0 0
下三角阵
在 MATLAB中,提取矩阵A的下三角阵的函数是tril(A)和 tril(A,k),其用法与提取上三角阵的函数triu(A)和 triu(A,k)完全相同。
矩阵的转置
所谓矩阵的转置,即把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,…,依此类推。显然,一个m×n矩阵经过转置运算后,变成一个nxm矩阵。
设A为mxn矩阵,则其转置矩阵B的元素定义如下:

转置运算符是小数点后面接单引号(.')
>> B = [71,3,-8;2,-9,8;0,4,5]
B =
71 3 -8
2 -9 8
0 4 5
>> B.'
ans =
71 2 0
3 -9 4
-8 8 5
还有一种转置叫共辄转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共辄。例如,B=A得到的B就是A的共辄转置矩阵,等价于B=conj(A).‘或 B=conj(A.’)。如果矩阵的元素都是实数,那么转置和共辄转置的结果是一样的。
矩阵的旋转
在MATLAB中,可以很方便地以90°为单位对矩阵A按逆时针方向进行旋转。利用函数rot90(A,k)将矩阵A旋转90°的k倍,当k为1时可省略。
>> A = [57,19,38;-2,31,8;0,84,5]
A =
57 19 38
-2 31 8
0 84 5
>> B = rot90(A)
B =
38 8 5
19 31 84
57 -2 0
矩阵的左右翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,……,依此类推。MATLAB对矩阵A实施左右翻转的函数是fliplr(A)。
>> A = [14,-9,8;-2,81,8;-2,4,0]
A =
14 -9 8
-2 81 8
-2 4 0
>> B = fliplr(A)
B =
8 -9 14
8 81 -2
0 4 -2
矩阵的上下翻转
与矩阵的左右翻转类似,矩阵的上下翻转是将原矩阵的第一行与最后一行调换,第二行与倒数第二行调换,……,依此类推。MATLAB对矩阵A实施上下翻转的函数是flipud(A)。
矩阵的逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得
A·B = B·A = I(I为单位矩阵)
则称B为A的逆矩阵,当然,A也是B的逆矩阵。
求矩阵的逆是一项非常繁琐的工作,容易出错,但在 MATLAB 中求一个矩阵的逆非常容易。求方阵A的逆矩阵可调用函数 inv(A)。
例子:求方阵A的逆矩阵,且验证A和A^-1是互逆的。
>> A = [1,-1,1;5,-4,3;2,1,1];
>> B = inv(A);
>> A * B
ans =
1.0000 0.0000 0
-0.0000 1.0000 0
-0.0000 0.0000 1.0000
>> B * A
ans =
1.0000 0.0000 -0.0000
0 1.0000 -0.0000
0 -0.0000 1.0000
A·B = B·A,即A·A^-1 = A-1·A,所以A与A-1是互逆的。
用矩阵求逆方法求解线性方程组。
将包含n个未知数,由n个方程构成的线性方程组表示为:

其矩阵表示形式为Ax = b
其中

由于A^-1·A = I,所以 x = A^-1 b
所以,利用求系数矩阵A的逆矩阵,可以求解线性方程组。
例子:
>> A = [1,2,3;1,4,9;1,8,27];
>> b = [5,-2,6]';
>> x = inv(A) * b
x =
23.0000
-14.5000
3.6667
矩阵的伪逆
如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A’同型的矩阵B,使得 A·B·A = A B·A·B = B
此时,称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵的伪逆的函数是pinv(A)。
>> A = [3,1,1,1;1,3,1,1;1,1,3,1];
>> B = pinv(A)
B =
0.3929 -0.1071 -0.1071
-0.1071 0.3929 -0.1071
-0.1071 -0.1071 0.3929
0.0357 0.0357 0.0357
若A是一个奇异矩阵,无一般意义上的逆矩阵,但可以求A的伪逆矩阵。
>> A = [0,0,0;0,1,0;0,0,1];
>> pinv(A)
ans =
0 0 0
0 1 0
0 0 1
本例中,A的伪逆矩阵和A相等,这是一个巧合。一般说来,矩阵的伪逆矩阵和自身是不同的。