Matlab矩阵变换
矩阵变换是指对一个矩阵进行某种运算与处理,其结果还是一个矩阵,包括求矩阵的对角阵、三角阵、转置矩阵,矩阵旋转,矩阵求逆等。
**一、**对角阵与三角阵
1.对角阵
只有对角线上有非0元素的矩阵称为对角阵
对角线上的元素相等的对角阵称为数量矩阵
对角线上的元素都为1的对角阵称为单位矩阵。
矩阵的对角线有许多性质,如转置运算时对角线元素不变,相似变换时对角线的和(称为矩阵的迹)不变等。
在研究矩阵时,很多时候需要将矩阵的对角线上的元素提取出来形成一个列向量,而有时又需要用一个向量构造一个对角阵。
(1)提取矩阵的对角线元素
设A为m×n矩阵,
**diag(A)**函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。★
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> diag(A)
ans =
1
5
diag(A)函数还有一种形式**diag(A,k)**,其功能是提取第k条对角线的元素。★
与主对角线平行,往上为第1条、第2条、…、第n 条对角线,往下为第-1条、第-2条、…、第-n条对角线。
主对角线为第0条对角线。
>> D1=diag(A,1)
D1 =
2
6
>> D2=diag(A,-1)
D2 =
4
(2)构造对角阵
设V为具有m个元素的向量
**diag(V)**将产生一个m×m对角阵,其主对用一个对角线的元素即为向量V 的元素★
diag(V)函数也有另一种形式**diag(V,k)**,其功能是产生 一个n×n(n=m+k) 对角阵,其第k条对角线的元素即为向量V的元素。
>> diag([1,2,3,4])
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> diag(1:3,-1)
ans =
0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0
例1 先建立3×3矩阵A,然后将A的第一行元素乘以1,第二行乘以2,第三行乘以3。★★
用一个对角阵阵左乘一个矩阵时,相当于用对角阵的第1个元素乘以该矩阵的第一行,用对角阵的第2个元素乘以该矩阵的第二行,…,依此类推。因此,只需按要求构造一个对角阵D,并用D左乘A即可。
如果要对A的每列元素乘以同一个数,可以用一个对角阵右乘矩阵A。
>> A=[1:3;4:6;7:9]
A =
1 2 3
4 5 6
7 8 9
>> D=diag(1:3)
D =
1 0 0
0 2 0
0 0 3
>> D*A
ans =
1 2 3
8 10 12
21 24 27
2.三角阵
三角阵又进一步分为上三角阵和下三角阵。
上三角阵是指矩阵的对角线以下的元素全为0的一种矩阵
下三角阵则是对角线以上的元素全为0的一种矩阵
(1) 上三角阵。
与矩阵A对应的上三角阵B是与A同型的一个矩阵,并且B的对角线以上(含对角线)的元素和A对应相等,而对角线以下的元素等于0。
求矩阵A的上三角阵的MATLAB函数是triu(A)。
triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A 的 第k 条对角线以上的元素。例如,提取矩阵A的第1条对角线以上的元素,形成新的矩阵B
>> A=[1:3;4:6;7:9]
A =
1 2 3
4 5 6
7 8 9
>> triu(A)
ans =
1 2 3
0 5 6
0 0 9
>> triu(A,1)
ans =
0 2 3
0 0 6
0 0 0
(2) 下三角阵。
在MATLAB中,提取矩阵A 的下三角阵的函数是tril(A)和tril(A,k), 其用法与提取上三角阵的函数 triu(A)和triu(A,k)完全相同。
>> tril(A)
ans =
1 0 0
4 5 0
7 8 9
>> tril(A,1)
ans =
1 2 0
4 5 6
7 8 9
**二、**矩阵的转置与旋转
1.矩阵的转置
所谓矩阵的转置,即把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,……, 依此类推。
显然,一个m×n矩阵经过转置运算后,变成一个n×m矩阵。
设A为m×n矩阵,则其转置矩阵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.’)。
如果矩阵的元素都是实数,那么转置和共轭转置的结果是一样的
2.矩阵的旋转
在MATLAB中,可以很方便地以90°为单位对矩阵A按逆时针方向进行旋转。利用函数 **rot90(A,k)**将矩阵A 旋转90°的k倍,当k为1时可省略。
A =
57 19 38
-2 31 8
0 84 5
>> B=rot90(A)
B =
38 8 5
19 31 84
57 -2 0
3.矩阵的左右翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调 换, ……,依此类推。MATLAB对矩阵A实施左右翻转的函数是**fliplr(A)**。例如:
A =
14 -9 8
-2 81 8
-2 4 0
>> fliplr(A)
ans =
8 -9 14
8 81 -2
0 4 -2
4.矩阵的上下翻转
与矩阵的左右翻转类似,矩阵的上下翻转是将原矩阵的第一行与最后一行调换,第二行与 倒数第二行调换, ……,依此类推。MATLAB 对矩阵A 实施上下翻转的函数是 flipud(A)。
>> flipud(A)
ans =
-2 4 0
-2 81 8
14 -9 8
三、 矩阵的逆与伪逆
1.矩阵的逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得A ·B=B ·A=I(I为单位矩阵) 则称B为A的逆矩阵,当然,A也是B 的逆矩阵。
求矩阵的逆是一项非常繁琐的工作,容易出错,但在 MATLAB 中,求一个矩阵的逆非常容易。
求方阵A的逆矩阵可调用函数 inv(A)。
例3-6 求方阵A的逆矩阵,且验证A与A-1是互逆的。
>> A=[1,-1,1;5,-4,3;2,1,1];
>> B=inv(A)
B =
-1.4000 0.4000 0.2000
0.2000 -0.2000 0.4000
2.6000 -0.6000 0.2000
>> A*B
ans =
1.0000 0 0
-0.0000 1.0000 0
-0.0000 0 1.0000
>> B*A
ans =
1.0000 0.0000 -0.0000
-0.0000 1.0000 0.0000
-0.0000 0.0000 1.0000
2.用矩阵求逆方法求解线性方程组
将包含n个未知数,由n个方程构成的线性方程组表示为
其矩阵表示形式为
Ax=b
其中
在线性方程组Ax=b 两边各左乘A-¹, 有
A
−
1
A
x
=
A
−
1
b
,
得到
x
=
A
−
1
b
A^{-1}Ax=A^{-1}b,得到x=A^{-1}b
A−1Ax=A−1b,得到x=A−1b
矩阵A的逆矩阵,可以求解线性方程组。
例1 用求逆矩阵的方法解线性方程组。
>> 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
3.矩阵的伪逆
如果矩阵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]
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·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]
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
Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编