3.2MATLAB学习笔记之矩阵处理-矩阵变换

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个方程构成的线性方程组表示为

图片1

其矩阵表示形式为

Ax=b

其中

image-20240921104918124

在线性方程组Ax=b 两边各左乘A-¹, 有
A − 1 A x = A − 1 b , 得到 x = A − 1 b A^{-1}Ax=A^{-1}b,得到x=A^{-1}b A1Ax=A1b,得到x=A1b
矩阵A的逆矩阵,可以求解线性方程组。

例1 用求逆矩阵的方法解线性方程组。

img

>> 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程序设计与应用 第三版》刘卫国主编

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值