MATLAB中对于矩阵的算术运算、关系运算、逻辑运算、转置、求逆、求和和求积

MATLAB在进行数据处理的时候常常需要对于数据进行一系列运算的操作,本文主要介绍对于矩阵的算术运算、关系运算、逻辑运算、转置、求逆、累加或者累乘等操作。

目录

1、算术运算

(1)矩阵运算中的加减运算

(2)矩阵运算中的乘法运算

(3)矩阵运算的除法运算

(4)矩阵运算中的乘方

(5)点运算中的乘除运算

(6)点运算中的乘方运算

2、关系运算

3、逻辑运算

4、矩阵的转置

5、对于矩阵进行求逆操作

(1)求解方针的逆矩阵

(2)对非方阵的矩阵和非满秩方阵求伪逆

6、求和及求积

(1)求和

(2)求积

1、算术运算

MATLAB中的算术运算主要包括点运算和矩阵运算,对于两个相同的矩阵进行点运算和矩阵运算的所得到的结果可能是截然不同的。

(1)矩阵运算中的加减运算

当两个矩阵之间进行加减运算的时候,矩阵中相同行和列的元素之间进行加减运算,其中两个矩阵的维度必须是相同的(如果两个矩阵的维度不相同话,那么程序会报错)。

两个维度相同的矩阵相加的公式可以写成如下的形式,假设A和B分别为:

                                                       A=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}                

                                                        B=\begin{pmatrix} b_{11} & b_{12} & \cdots & b_{1n} \\ b_{21} & b_{22} & \cdots & b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ b_{m1} & b_{m2} & \cdots & b_{mn} \end{pmatrix}   

相加之后的结果为:

                         A+B=\begin{pmatrix} a_{11}+b_{11} & a_{12}+b_{12} & \cdots & a_{1n}+b_{1n}\\ a_{21}+b_{21} & a_{22}+b_{22} & \cdots & a_{2n}+b_{2n} \\ \vdots & \vdots & \ddots &\vdots \\ a_{m1}+b_{m1} & a_{m2}+b_{m2} &\cdots & a_{mn}+b_{mn} \end{pmatrix}

在线性代数上,我们直到矩阵的加减运算满足交换律A+B=B+A和结合律(A+B)+C=A+(B+C),这些在MATLAB中同样适用。

例如:

A=[45,23,62;61,73,89;13,15,84];
B=[59,49,91;18,39,20;8,71,49];
C=A+B
D=A-B

运算结果如下所示:

C =
   104    72   153
    79   112   109
    21    86   133

D =
   -14   -26   -29
    43    34    69
     5   -56    35

矩阵之间的减法的原理和矩阵的加法相似,同时矩阵的减法可以看作是A-B=A+(-B)。

(2)矩阵运算中的乘法运算

矩阵的乘法可以分为数和矩阵相乘和矩阵和矩阵的相乘。

在数与矩阵相乘的过程中,假设实数k与矩阵A相乘,最后的结果为kA,矩阵的每一个元素均乘以k倍。假设矩阵A为:

                                                      A=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}

在乘上k倍之后结果为:

                                                   kA=\begin{pmatrix} ka_{11} & ka_{12} & \cdots & ka_{1n} \\ ka_{21} & ka_{22} & \cdots & ka_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ ka_{m1} & ka_{m2} & \cdots & ka_{mn} \end{pmatrix}

通过MATLAB代码实现如下所示:

A=[4,5,6;16,14,17;20,4,15];
B=4*A

运算结果如下所示:

B =

    16    20    24
    64    56    68
    80    16    60

在矩阵与矩阵相乘的过程中,假设A是一个m×p的矩阵,B是一个p×n的矩阵,如果A与B相乘最终得到一个m×n的矩阵。假设C=A*B,那么C的第i行第j列的元素是A的第i行的元素与B的第j列对应的元素乘积之和。这里假设A和B都是2×2行的矩阵:         

A=\begin{pmatrix} a_{11} &a_{12} \\ a_{21}& a_{22} \end{pmatrix}

                                                       

B=\begin{pmatrix} b_{12}& b_{12}\\ b_{21}& b_{22} \end{pmatrix}

那么A和B相乘的结果为:

A*B=\begin{pmatrix} a_{11}*b_{11}+a_{12}*b_{21} & a_{11}*b_{12}+a_{12}*b_{22} \\ a_{21}*b_{11}+a_{22}*b_{21} & a_{21}*b_{12}+a_{22}*b_{22} \end{pmatrix}

在这里为了简化描述运算过程仅仅写了两个2×2矩阵的运算,通过MATLAB代码可以对于维度更高的矩阵进行计算,例如:

A=[12,-5;6,7;1,4];
B=[15,9,10;8,11,2];
C=A*B

运算的结果如下所示:

C =

   140    53   110
   146   131    74
    47    53    18

通过上面的结果可以看出,3×2的矩阵和2×3的矩阵相乘得到最终的结果为3×3的矩阵。在线性代数中,我们直到两个矩阵相乘满足的是结合律:(AB)C=A(BC),k(AB)=(kA)B,还有分配率:A(B+C)=AB+AC,其中k表示常数,A、B、C分别为矩阵。

(3)矩阵运算的除法运算

在MATLAB中,矩阵除法可以分为左除(/)和右除(\),其中A\B相当于A^{-1}*B,而A/B相当于A*B^{-1},如果A是非奇异的方阵,那么左除和右除都可以实现。

例如:

A=[2,3,8;4,7,9;5,6,4];
B=[4,5,4;3,5,9;8,3,2];
C1=A/B
C2=A\B

运算的结果如下所示:

C1 =

   -0.6087    1.1304    0.1304
    0.8333    0.6667   -0.1667
    1.3551   -0.1594    0.0072
C2 =

    4.3019    0.6981   -3.0566
   -2.4906   -0.5094    2.7170
    0.3585    0.6415    0.2453

可以看出针对左除和右除,最终运算结果是不同的。

(4)矩阵运算中的乘方

在进行矩阵运算中的乘法运算时,矩阵的n次方即为矩阵与自身进行相乘的运算,需要注意的是,矩阵必须是方阵。假设A是一个方阵,那么就可以推出:A^{2}=A*AA^{3}=A*A*A,...依次类推,例如:

A=[2,1,4;5,2,1;4,6,2];
B=A^2
C=A^3

运行的结果如下所示:

B =

    25    28    17
    24    15    24
    46    28    26
C =

   258   183   162
   219   198   159
   336   258   264

(5)点运算中的乘除运算

在MATLAB中,矩阵运算和点运算是不同的概念,矩阵的点运算是矩阵每一个元素与对应相同行和列的矩阵进行乘运算。

例如,将两个3×3的矩阵分别进行矩阵运算和点运算:

A=[2,4,7;3,1,4;5,2,6];
B=[2,1,4;5,2,1;4,6,2];
C=A.*B
D=A*B
E=A/B
F=A./B

运算结果如下所示:

C =

     4     4    28
    15     2     4
    20    12    12
D =

    52    52    26
    27    29    21
    44    45    34
E =

    1.6154   -0.7692    0.6538
    0.9744    0.2821   -0.0897
    1.4103    0.4872   -0.0641
F =

    1.0000    4.0000    1.7500
    0.6000    0.5000    4.0000
    1.2500    0.3333    3.0000

通过上面的运算结果可以看出,矩阵运算和点运算是不同的值。

其中需要注意的是:

  • 进行点乘和点除的时候,两个矩阵必须是维度相同的矩阵,否则会报错。
  • 在进行点运算中的除法运算时,./和.\的作用是相同,所得到的结果也是一样的。

(6)点运算中的乘方运算

在MATLAB中,如果两个矩阵A和B,在进行点运算的乘方运算时所得到的矩阵是C,那么C的第i行第j列的计算方式为:C_{ij}={A_{ij}}^{B_{ij}}

例如:

A=[2,4,5;3,2,2];
B=[2,3,1;4,6,2];
C=A.^B

运算后的结果如下所示:

C =

     4    64     5
    81    64     4

除了“.^”之外,MATLAB中还提供了power函数,效果与”.^“效果相同,例如再次使用上面的矩阵可以得到:

A=[2,4,5;3,2,2];
B=[2,3,1;4,6,2];
C=A.^B
D=power(A,B)

运行结果如下所示:

C =

     4    64     5
    81    64     4
D =

     4    64     5
    81    64     4

通过前后对比不难看出,两者的运算结果是相同。因此power函数与”.^“效果等效。

2、关系运算

MATLAB中关系运算符包括“>”(大于)、“<”(小于)、“>=”(大于等于)、“<=”(小于等于)、“==”(等于)和“~=”(不等于)等。

例如:

A=[12,45,18;19,24,28];
B=[12,10,19;24,29,14];
C=A>B
D=A<B
E=A>=B
F=A<=B
G=A==B
H=A~=B

运行结果如下所示:

C =
  2×3 logical 数组
   0   1   0
   0   0   1
D =
  2×3 logical 数组
   0   0   1
   1   1   0
E =
  2×3 logical 数组
   1   1   0
   0   0   1
F =
  2×3 logical 数组
   1   0   1
   1   1   0
G =
  2×3 logical 数组
   1   0   0
   0   0   0
H =
  2×3 logical 数组
   0   1   1
   1   1   1

通过上面的结果可以看出,两个矩阵之间的对应运算分别进行了关系运算,当关系运算结果为真的时候,结果返回为1;当关系运算结果为假的时候,结果返回为0。

3、逻辑运算

与大多数编程语言相同,MATLAB中也提供了逻辑运算,逻辑运算主要包括下面这些运算符"&"(与)、“|”(或)、"~"(非)、和xor(异或)几种运算符。

例如:

A=[1,0,1;0,1,1];
B=[1,1,1;0,0,0];
C=A|B
D=A&B
E=~A
F=xor(A,B)

运行的结果如下所示:

C =
  2×3 logical 数组

   1   1   1
   0   1   1
D =
  2×3 logical 数组

   1   0   1
   0   0   0
E =
  2×3 logical 数组

   0   1   0
   1   0   0
F =
  2×3 logical 数组

   0   1   0
   0   1   1

逻辑运算同时也可以用来验证结果的正确性,例如对于下面的矩阵A检验所有大于10且为偶数的元素:

A=[12,11,8;16,19,21];
C=(A>10)&(mod(A,2)==0)

运行结果如下所示:

C =
  2×3 logical 数组

   1   0   0
   1   0   0

4、矩阵的转置

将矩阵A的每一行与相同序列的列进行交换后的矩阵称之为转置矩阵,在线型代数中,转置矩阵一般用A^T来表示。

假设A原有矩阵为:

A=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}

 进行转置后的矩阵为:

A=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1m} \\ a_{21} & a_{22} & \cdots & a_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nm} \end{pmatrix}

MATLAB对于矩阵的转置的操作如下所示:

A=[3,4,7;4,3,1];
B=A.'

运算结果如下所示:

B =

     3     4
     4     3
     7     1

5、对于矩阵进行求逆操作

(1)求解方针的逆矩阵

在对于矩阵进行数据处理的时候,我们常常需要对其求进行逆操作,假设AB=BA=E(E为单位矩阵),那么B是A的逆矩阵,同时A也是B的逆矩阵,在MATLAB中提供了inv函数对于矩阵进行求逆操作。

在线型代数中,我们直到有下面的结论:(A^{-1})^{-1}=A,利用MATLAB进行验证可以得到:

A=[3,4,6,7;23,4,5,16;8,39,2,10;4,5,17,21];
B=inv(A)
C=inv(inv(A))

运算之后所得到的结果如下所示:

B =

    0.3233    0.0295   -0.0208   -0.1203
    0.0815   -0.0136    0.0222   -0.0274
    0.8130   -0.0522   -0.0515   -0.2067
   -0.7391    0.0399    0.0404    0.2444
C =

    3.0000    4.0000    6.0000    7.0000
   23.0000    4.0000    5.0000   16.0000
    8.0000   39.0000    2.0000   10.0000
    4.0000    5.0000   17.0000   21.0000

在线性代数中也有如下结论:(AB)^{-1}=B^{-1}A^{-1},同时可以利用MATLAB进行验证和求解:

A=[13,4,5;17,23,10;8,5,7];
B=[5,9,11;14,18,20;31,34,33];
C=inv(A*B)
D=inv(B)*inv(A)

运行结果如下所示:

C =

   -0.1511    0.0670   -0.0165
    0.2673   -0.1576    0.1199
   -0.1373    0.0981   -0.0992
D =

   -0.1511    0.0670   -0.0165
    0.2673   -0.1576    0.1199
   -0.1373    0.0981   -0.0992

通过运行的结果可以看出结果相同,可以验证结论的正确性。

在线性代数中,如果矩阵A可逆且\lambda \neq 0,则满足下面规律:(\lambda A)^{-1}=\lambda ^{-1}A^{-1},通过MATLAB代码对其进行验证,假设\lambda =2

a=2;
A=[5,6,8;4,3,9;7,8,2]
B=inv(a*A)
C=a^(-1)*inv(A

运行结果如下所示:

B =

   -0.3750    0.2955    0.1705
    0.3125   -0.2614   -0.0739
    0.0625    0.0114   -0.0511
C =

   -0.3750    0.2955    0.1705
    0.3125   -0.2614   -0.0739
    0.0625    0.0114   -0.0511

可以看到结果相同,说明结论正确。

除了inv函数之外,还可以通过计算矩阵的-1次方得到该矩阵的逆矩阵。

(2)对非方阵的矩阵和非满秩方阵求伪逆

当矩阵A不是方阵的时候,矩阵是没有逆矩阵的,但是MATLAB提供了pinv函数用于对于不是方针的矩阵和非满秩的方阵求伪逆操作,所谓伪逆就是MATLAB找到一个与A的转置相同行和列的矩阵满足下面这些条件:ABA=A,BAB=B,此时B就是A的伪逆。

例如:

A=[2,5,4;5,6,8];
B=pinv(A)

运算结果如下所示:

B =

   -0.2494    0.1837
    0.4376   -0.2041
   -0.1723    0.1633

6、求和及求积

在MATLAB中可以对于矩阵的所有数据进行求和以及求积的运算,在进行数据处理的过程中方便运算,下面对于求和和求积分别进行介绍。

(1)求和

MATLAB中提供了sum函数用于对于数据进行求和运算,针对sum函数,有如下所示的运算规则(其中V表示向量,A表示矩阵):

  • sum(V):计算向量中的所有元素的累加和。
  • sum(A):返回一个行向量,行向量的每一个元素计算的是矩阵A的每一列的和。
  • sum(A,num):当num的值为1的时候,此时和sum(A)功能相同;当num的值为2的时候,返回的是一个列向量,列向量的每一个元素对应的是矩阵A中的每一行的和。
  • sum(sum(A)):对于矩阵整体的所有元素进行求和。

例如对于一个向量进行求和运算:

V=[34,24,5,6,31,23,45,23];
B=sum(V)

运算结果如下所示:

B =

   191

在比如对于一个矩阵进行求和运算:

A=[3,4,7,8;8,5,3,1;9,5,10,12];
B=sum(A)
C=sum(A,1)
D=sum(A,2)
E=sum(sum(A))

运算结果如下所示:

B =

    20    14    20    21
C =

    20    14    20    21
D =

    22
    17
    36
E =

    75

通过上面的结果可以看到,sum(A)与sum(A,1)返回是一个行向量,计算矩阵中每一列的和,sum(A,2)返回的是一个列向量,计算的是矩阵中每一行的和,而sum(sum(A))计算的是矩阵中所有元素的和。

(2)求积

MATLAB中提供了prod函数用于对于数据进行求积运算,针对prod函数,有如下所示的运算规则(其中V表示向量,A表示矩阵):

  • prod(V):计算向量中的所有元素的累乘。
  • prod(A):返回一个行向量,行向量的每一个元素计算的是矩阵A的每一列的积。
  • prod(A,num):当num的值为1的时候,此时和prod(A)功能相同;当num的值为2的时候,返回的是一个列向量,列向量的每一个元素对应的是矩阵A中的每一行的积。
  • prod(prod(A)):对于矩阵整体的所有元素进行求积。

例如:

例如对于一个矩阵进行求积运算:

A=[3,4,7,8;8,5,3,1;9,5,10,12];
B=prod(A)
C=prod(A,1)
D=prod(A,2)
E=prod(prod(A))

运算结果如下所示:

B =

   216   100   210    96
C =

   216   100   210    96
D =

         672
         120
        5400
E =

   435456000

通过上面的结果可以看到,prod(A)与prod(A,1)返回是一个行向量,计算矩阵中每一列的乘积,prod(A,2)返回的是一个列向量,计算的是矩阵中每一行的积,而prod(prod(A))计算的是矩阵中所有元素的积。

猜你喜欢

转载自blog.csdn.net/qq_54186956/article/details/127023262