当前位置:网站首页>MATLAB程序设计与应用 3.2 矩阵变换
MATLAB程序设计与应用 3.2 矩阵变换
2022-08-04 10:32:00 【Ding Jiaxiong】
MATLAB程序设计与应用
3. 第3章 MATLAB矩阵处理
3.2 矩阵变换
矩阵变换是指对一个矩阵进行某种运算与处理,其结果还是一个矩阵,包括求矩阵的对角阵、三角阵、转置矩阵,矩阵旋转,矩阵求逆等。
3.2.1 对角阵和三角阵
对角阵
只有对角线上有非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)完全相同。
3.2.2 矩阵的转置与旋转
矩阵的转置
所谓矩阵的转置,即把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,…,依此类推。显然,一个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)。
3.2.3 矩阵的逆和伪逆
矩阵的逆
对于一个方阵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相等,这是一个巧合。一般说来,矩阵的伪逆矩阵和自身是不同的。
边栏推荐
猜你喜欢
随机推荐
多了<audio controls=
移动端 开源低代码工具 beeware 和 kivy
[论文翻译] Unpaired Image-to-Image Translation using Adversarial Consistency Loss
Win11怎么进行左右键对调?
OD-Model【5】:YOLOv1
常用的输入对象
[代码阅读] CycleGAN: Unpaired Image-To-Image Translation Using Cycle-Consistent Adversarial Networks
ROI LTV CPA ECPM体系讲解
pyvista 的介绍与使用
【c】操作符详解(二)
CompletableFuture接口核心方法介绍
多媒体和物联网技术让版本“活”起来 129张黑胶唱片“百年留声”
开源一夏|ArkUI如何自定义弹窗(eTS)
【Idea系列】idea配置
XCTF-easy_Maze
用匿名函数定义函数_c语言最先执行的函数是
HCIP 交换实验
有12个球,其中11个重量相等,只有1个不一样,不知是轻还是重.用天平秤三次,找出这个球.
The difference between Mysql application log time and system time is eight hours
There are 12 balls, including 11 weight, only one, don't know is light or heavy. Three times in balance scales, find out the ball.