矩阵/数组运算

矩阵运算

  矩阵的代数运算应包括线性代数的各个方面,这里只介绍一部分

加减、数乘与乘法

>> A = [1 2 3;4 5 6;7 8 9],B = [9 8 7;6 5 4;3 2 1]
A =
     1     2     3
     4     5     6
     7     8     9
B =
     9     8     7
     6     5     4
     3     2     1
>> C = A + B,D = A - B,E = A * B    %矩阵的加减与乘法
C =
    10    10    10
    10    10    10
    10    10    10
D =
    -8    -6    -4
    -2     0     2
     4     6     8
E =
    30    24    18
    84    69    54
   138   114    90
>> F = 3 * A               %矩阵的数乘
F =
     3     6     9
    12    15    18
    21    24    27

矩阵的逆

  矩阵的逆可以使用函数inv(A)来实现

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> B = inv(A)
B =
    0.1472   -0.1444    0.0639
   -0.0611    0.0222    0.1056
   -0.0194    0.1889   -0.1028

矩阵的除法

  矩阵的除法分为左除和右除

  • 左除 A * X = B \Rightarrow X = A\B相当于X = inv(A) * B
  • 右除 X * A = B \Rightarrow X = B/A相当于X = B * inv(A)

  例:求下列方程组的解
x 1 + 4 x 2 7 x 3 + 6 x 4 = 0 2 x 2 + x 3 + x 4 = 8 x 2 + x 3 + 3 x 4 = 2 x 1 + x 3 x 4 = 1 \begin{aligned} x_1 + 4x_2-7x_3+6x_4&=0 \\ 2x_2+x_3+x_4&=-8\\ x_2+x_3+3x_4&=-2\\ x_1+x_3-x_4&=1 \end{aligned}

>> A = [1 4 -7 6;0 2 1 1;0 1 1 3;1 0 1 -1]
A =
     1     4    -7     6
     0     2     1     1
     0     1     1     3
     1     0     1    -1
>> B = [0; -8;-2;1]
B =
     0
    -8
    -2
     1
>> X = A\B
X =
    3.0000
   -4.0000
   -1.0000
    1.0000
>> X = inv(A) * B
X =
    3.0000
   -4.0000
   -1.0000
    1.0000

矩阵幂运算

  如线性代数中定义的幂运算一样,用 A 2 A^2 表示 A A A^*A ,所以A必须为方阵才能进行幂运算。

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> B = A ^ 3
B =
        1197        1029        1149
        1077        1125        1173
        1101        1221        1053

数组运算

  数组的加减与数乘与数乘运算与矩阵运算相同,但是乘除运算不同,矩阵的乘法与除法是把矩阵看做是一个整体,而数组的乘除运算是数组对应元素的运算,两个数组在运算时,必须保证两数组的规模相同,这一点也是和矩阵不同的地方。

  另一个数组运算与矩阵运算不同的是,数组的运算符号是.*,./,.\,.^,前面有一个点,称为点乘、点除。

数组乘法

  数组的乘法是两数组对应位置的元素相乘,注意事项在前面已经说明,注意两数组的规模要相同,并且用点乘。

>> A = [1 2 3;4 5 6]
A =
     1     2     3
     4     5     6
>> B = [1 1 2;3 2 1]
B =
     1     1     2
     3     2     1
>> C = A .* B
C =
     1     2     6
    12    10     6

数组除法

  同矩阵除法,也分为左除和右除,但是意义与矩阵的左除和右除不一样,

  • 右除:A ./ B 就是数组A对应元素除以B
  • 左除:A .\ B 就是数组B对应元素除以A
>> A,B
A =
     1     2     3
     4     5     6
B =
     1     1     2
     3     2     1
>> C = A./ B
C =
    1.0000    2.0000    1.5000
    1.3333    2.5000    6.0000
>> D = A.\ B
D =
    1.0000    0.5000    0.6667
    0.7500    0.4000    0.1667

数组幂运算

  数组的幂运算就是各个元素的幂运算,注意.^

>> A
A =
     1     2     3
     4     5     6
>> A .^ 2
ans =
     1     4     9
    16    25    36

矩阵的基本属性

行列式

  使用函数det(A)实现

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> det(A)                  %计算魔方矩阵的行列式
ans =
  -360

矩阵的秩

  rank(A)可以用来求解矩阵的秩

>> A = [1 2 3;4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9
>> ra = rank(A)
ra =
     2

矩阵的特征值与特征向量

  求矩阵A的特征值和特征向量的数值解,有两个函数可以用

  • [X λ \lambda ] = eig(A)
  • [X λ \lambda ] = eigs(A) 该种方法使用迭代法求解,所以规模上最多给出6个特征值和特征向量
>> A
A =
     1    -3     3
     3    -5     3
     6    -6     4
>> [X lambda] = eig(A)
X =
   -0.4082   -0.8103    0.1933
   -0.4082   -0.3185   -0.5904
   -0.8165    0.4918   -0.7836
lambda =
    4.0000         0         0
         0   -2.0000         0
         0         0   -2.0000

  lambda矩阵对角线给出了矩阵A的特征值,与这些特征值相对应的特征向量用X中相对应的列来代表。

矩阵的条件数

  cond(A)函数用来求矩阵的条件数,条件数的大小反映出对于方程AX=b,如果A和b发生细微变化,解变化的剧烈程度,当条件数很大时,说明该矩阵是病态矩阵或者不稳定矩阵。

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> cond(A)
ans =
    4.3301

一些常用函数

矩阵/数组的提取与翻转

函数 功能
triu(A) 提取A的上三角矩阵,其余补零
tril(A) 下三角
diag(A) 提取矩阵A的对角线元素
flipud(A) 将A沿水平轴上下翻转
fliplr(A) 沿垂直轴左右翻转
flipdim(A,dim) dim=1,按行翻转;dim=2,按列翻转
rot90(A) 矩阵A逆时针旋转90

  上述中diag()函数有两个用法,当输入的参数是矩阵时,提取出矩阵的对角元素,如输入参数为一向量,则以向量中的元素为对角元素生成一对角矩阵

>> A
A =
     1    -3     3
     3    -5     3
     6    -6     4
>> triu(A)
ans =
     1    -3     3
     0    -5     3
     0     0     4
>> tril(A)
ans =
     1     0     0
     3    -5     0
     6    -6     4
>> A
A =
    1    -3     3
    3    -5     3
    6    -6     4
>> diag(A)
ans =
    1
   -5
    4
 >> flipud(A)       %上下翻转
ans =
    6    -6     4
    3    -5     3
    1    -3     3
>> fliplr(A)         %左右翻转
ans =
    3    -3     1
    3    -5     3
    4    -6     6
>> flipdim(A,1)   %沿行方向上翻转,即上下翻转
ans =
    6    -6     4
    3    -5     3
    1    -3     3
>> flipdim(A,2)    %沿列方向上翻转,即左右翻转
ans =
    3    -3     1
    3    -5     3
    4    -6     6
>> A
A =
    1    -3     3
    3    -5     3
    6    -6     4
>> rot90(A)
ans =
    3     3     4
   -3    -5    -6
    1     3     6

指数运算

  对于矩阵,在线性代数定义了其指数运算的规则,而数组的指数运算指的是数组各元素的指数运算。

  数组进行指数运算的函数是exp(),矩阵是expm(),m代表matrix,表示为专门为矩阵专门设计的。

  这里需要注意的是expm()输入的矩阵必须为方阵。

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> B = expm(A)
B =
   1.0e+06 *
    1.0898    1.0896    1.0897
    1.0896    1.0897    1.0897
    1.0896    1.0897    1.0897
>> C = exp(A)
C =
   1.0e+03 *
    2.9810    0.0027    0.4034
    0.0201    0.1484    1.0966
    0.0546    8.1031    0.0074

猜你喜欢

转载自blog.csdn.net/The_last_knight/article/details/83899672