【Matlab学习2.2】矩阵变换

对角阵

对角阵:只有对角线上有非零元素的矩阵。 
数量矩阵:对角线上的元素相等的对角矩阵。 
单位矩阵:对角线上的元素都为1的对角矩阵。

提取矩阵的对角线元素

diag(A):提取矩阵 A 主对角线元素,产生一个列向量。 
diag(A,k):提取矩阵 A 第 k 条对角线的元素,产生一个列向量。

矩阵的对角线

构造对角阵

diag(V):以向量 V 为主对角线元素,产生对角矩阵。 
diag(V,k):以向量 V 为第 k 条对角线元素,产生对角矩阵。

例2.2.1:

先建立5×5矩阵 A,然后将 A 的第一行元素乘以1,第二行乘以2,…,第五行乘以5。

>> A = [7,0,1,0,5; 3,5,7,4,1; 4,0,3,0,2; 1,1,9,2,3; 1,8,5,2,9]
A =
       7              0              1              0              5       
       3              5              7              4              1       
       4              0              3              0              2       
       1              1              9              2              3       
       1              8              5              2              9       
>> D = diag(1:5)
D =
       1              0              0              0              0       
       0              2              0              0              0       
       0              0              3              0              0       
       0              0              0              4              0       
       0              0              0              0              5       
>> D*A    #用一个对角阵左乘一个矩阵时,相当于用对角阵对角线的第1个元素乘以该矩阵的第一行,用对角阵对角线的第2个元素乘以该矩阵的第二行,……,依此类推。
ans =
       7              0              1              0              5       
       6             10             14              8              2       
      12              0              9              0              6       
       4              4             36              8             12       
       5             40             25             10             45

思考:要将 A 的各列元素分别乘以对角阵的对角线元素,如何实现? 

>> A = [7,0,1,0,5; 3,5,7,4,1; 4,0,3,0,2; 1,1,9,2,3; 1,8,5,2,9]
>> D = diag(1:5);
>> A*D    #要将A的各列元素分别乘以对角阵的对角线元素,可以用一个对角阵右乘矩阵A。
ans =
       7              0              3              0             25       
       3             10             21             16              5       
       4              0              9              0             10       
       1              2             27              8             15       
       1             16             15              8             45

三角阵

上三角阵:矩阵的对角线以下的元素全为零的矩阵。 
下三角阵:对角线以上的元素全为零的矩阵。

上三角矩阵

triu(A):提取矩阵A的主对角线及以上的元素。 
triu(A,k):提取矩阵A的第 k 条对角线及以上的元素。

记忆方法:tri—triangle—三角,u—up—上,l—low—下。

例2.2.2:

>> triu(ones(4),-1)
ans =
       1              1              1              1       
       1              1              1              1       
       0              1              1              1       
       0              0              1              1     

下三角矩阵

在 Matlab 中,提取矩阵A的下三角矩阵的函数是 tril,其用法与 triu 函数完全相同。  

矩阵的转置

转置运算符是小数点后面接单引号(.')。
共轭转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共轭。

例2.2.3:

>> A = [1,3;3+4i,1-2i]
A =
   1.0000 + 0.0000i   3.0000 + 0.0000i
   3.0000 + 4.0000i   1.0000 - 2.0000i
>> A.'
ans =
   1.0000 + 0.0000i   3.0000 + 4.0000i
   3.0000 + 0.0000i   1.0000 - 2.0000i
>> A'
ans =
   1.0000 + 0.0000i   3.0000 - 4.0000i
   3.0000 + 0.0000i   1.0000 + 2.0000i

矩阵的转置:把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,…,依此类推。

如果矩阵的元素是实数,那么转置和共轭转置的结果是一样的。 

矩阵的旋转

rot90(A,k):将矩阵A逆时针方向旋转90º的k倍,当k为1时可省略。

例2.2.4:

>> A=[1,3,2;-3,2,1;4,1,2]
A =
     1     3     2
    -3     2     1
     4     1     2
>> rot90(A,2)
ans =
     2     1     4
     1     2    -3
     2     3     1
>> A(4,3) = 3
A =
     1     3     2
    -3     2     1
     4     1     2
     0     0     3
>> rot90(A)
ans =
     2     1     2     3
     3     2     1     0
     1    -3     4     0

矩阵的翻转

 对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依此类推。

fliplr(A):对矩阵A实施左右翻转 
flipud(A):对矩阵A实施上下翻转。

记忆方法:filp—翻转,lr—left-right—左右,ud—up-down—左右。

例2.2.5:

验证魔方阵的主对角线、副对角线元素之和相等。

>> A = magic(5)
A =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
>> sum(diag(A))        #求出矩阵A的主对角线之和
ans =
    65
>> sum(diag(fliplr(A)))    #对矩阵A实施上下翻转或左右翻转得到矩阵B,这样A的副对角线就移到了B的主对角线
ans =
    65
#5阶魔方阵的主对角线、副对角线元素之和相等,都为65。

矩阵求逆

对于一个方阵 A,如果存在一个与其同阶的方阵B,使得 $AB=BA=I$ (I为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵。

inv(A):求方阵A的逆矩阵。

例2.2.6:

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

$$\begin{cases} x+2y+3z=5\\[2ex]x+4y+9z=-2\\[2ex]x+8y+27z=6\\[2ex]\end{cases}$$

答案:

在线性方程组 $Ax=b$ 两边各左乘 $A^{-1}$,得 $x=A^{-1}b$。

>> 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
#方法二:使用右除
>> x = A\b
x =
   23.0000
  -14.5000
    3.6667
posted @ 2023-01-31 16:40  SplendidCrepuscule  阅读(809)  评论(0编辑  收藏  举报