• MATLAB程序设计与应用 3.2 矩阵变换


    MATLAB程序设计与应用

    3. 第3章 MATLAB矩阵处理

    3.2 矩阵变换

    矩阵变换是指对一个矩阵进行某种运算与处理,其结果还是一个矩阵,包括求矩阵的对角阵、三角阵、转置矩阵,矩阵旋转,矩阵求逆等。

    3.2.1 对角阵和三角阵
    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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13

        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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
      • 构造对角阵

        设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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

        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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

      例子:先建立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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      如果要对A的每列元素乘以同一个数,可以用一个对角阵右乘矩阵 A。

    2. 三角阵

      三角阵又进一步分为上三角阵和下三角阵。所谓上三角阵,是指矩阵的对角线以下的元素全为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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15

        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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
      • 下三角阵

        在 MATLAB中,提取矩阵A的下三角阵的函数是tril(A)和 tril(A,k),其用法与提取上三角阵的函数triu(A)和 triu(A,k)完全相同。

    3.2.2 矩阵的转置与旋转
    1. 矩阵的转置

      所谓矩阵的转置,即把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,…,依此类推。显然,一个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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15

      还有一种转置叫共辄转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共辄。例如,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]
      
      A =
      
          57    19    38
          -2    31     8
           0    84     5
      
      >> B = rot90(A)
      
      B =
      
          38     8     5
          19    31    84
          57    -2     0
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    3. 矩阵的左右翻转

      对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,……,依此类推。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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    4. 矩阵的上下翻转

      与矩阵的左右翻转类似,矩阵的上下翻转是将原矩阵的第一行与最后一行调换,第二行与倒数第二行调换,……,依此类推。MATLAB对矩阵A实施上下翻转的函数是flipud(A)。

    3.2.3 矩阵的逆和伪逆
    1. 矩阵的逆

      对于一个方阵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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      A·B = B·A,即A·A^-1 = A-1·A,所以A与A-1是互逆的。

    2. 用矩阵求逆方法求解线性方程组。

      将包含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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    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];
      >> 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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      若A是一个奇异矩阵,无一般意义上的逆矩阵,但可以求A的伪逆矩阵。

      >> A = [0,0,0;0,1,0;0,0,1];
      >> pinv(A)
      
      ans =
      
           0     0     0
           0     1     0
           0     0     1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      本例中,A的伪逆矩阵和A相等,这是一个巧合。一般说来,矩阵的伪逆矩阵和自身是不同的。

  • 相关阅读:
    整形数据和浮点型数据在内存中的存储差别
    趣链BaaS服务平台调研
    【打开已有和新建Qt项目】
    不同规模的企业如何借助宁盾LDAP统一用户认证实现安全和效率需求?
    【k8s资源调度-StatefulSet】
    单分散亚微米聚苯乙烯—聚乙酸乙烯酯(P(St-VAc))聚合物微球/聚苯乙烯塑料微球聚乙烯醇相关知识
    Linux oracle 数据导出导入步骤:
    windows10系统-16-制作导航网站WebStack-Hugo
    Docker之自定义镜像上传阿里云
    Python List 中的append 和 extend 的区别
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126152526