线性代数

人们常常把“MATLAB”直接翻译为“矩阵工作室”,顾名思义,MATLAB在矩阵分析方面的功能非常强大。事实的确如此,MATLAB总包提供了大量的矩阵操作和分析函数,利用它们可以处理常见的线性代数计算问题。介绍数组运算时,习惯上将只有一个元素的数组称为标量,将一维数组称为向量,将二维数组称为矩阵。[大谦MATLAB,dqmatlab点com]

矩阵行列式

MATLAB和Python都提供了det函数计算矩阵的行列式。

【MATLAB】

下面给定一个矩阵,计算它的行列式。在命令窗口键入下面的命令行:

code.matlab
>> A=[1 2 0;2 5 -1;4 10 -1];
>> b=det(A)
b =
1

所以,A矩阵的行列式等于1。

【Python】

Python中使用NumPy包的linalg.det函数计算矩阵的行列式。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> a=np.array([[1,2,0],[2,5,-1],[4,10,-1]])
>>> b=np.linalg.det(a)
>>> b
1.0

矩阵的四则运算

MATLAB和Python NumPy包中,矩阵的基本运算可以象一般数值运算那样进行,也就是说,可以用运算符直接进行计算。

【MATLAB】

数组和矩阵的加减运算使用加号和减号,即“+”和“-”。

下面给定两个向量,计算它们的和。在命令窗口键入下面的命令行:

code.matlab
>> x=[3 10 5 6 19];
>> y=[6 2 9 12 9];
>> z=x+y
z =
     9    12    14    18    28

所以,两个大小相同的向量相加,是将它们的对应元素相加并组成新的向量。

【Python】

Python中使用NumPy包的add函数将两个向量相加。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[3,10,5,6,19]
>>> y=[6,2,9,12,9]
>>> z=np.add(x,y)
>>> z
array([ 9, 12, 14, 18, 28])

注意,下面对两个向量使用加号。

code.python
>>> z=x+y
>>> z
[3, 10, 5, 6, 19, 6, 2, 9, 12, 9]

结果是将两个向量水平方向拼接起来得到新的向量。

【MATLAB】

MATLAB中将两个矩阵相减,直接使用减号。在命令窗口键入下面的命令行:

code.matlab
>> x=[5 9;2 7;1 10];
>> y=[3 11;5 9;5 2];
>> z=x-y
z =
     2    -2
    -3    -2
-    4     8

【Python】

Python中矩阵相减可以使用NumPy包的subtract函数。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[[5,9],[2,7],[1,10]]
>>> y=[[3,11],[5,9],[5,2]]
>>> z=np.subtract(x,y)
>>> z
array([[ 2, -2],
       [-3, -2],
       [-4,  8]])

【MATLAB】

MATLAB中矩阵相乘使用“*”运算符。在命令窗口键入下面的命令行:

code.matlab
>> x=[1 3;4 6];
>> y=[6 1;9 3];
>> z=x*y
z =
    33    10
    78    22

【Python】

Python中矩阵相乘可以使用NumPy包的matmul函数。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[[1,3],[4,6]]
>>> y=[[6,1],[9,3]]
>>> z=np.matmul(x,y)
>>> z
array([[33, 10],
       [78, 22]])

【MATLAB】

如果只是将两个矩阵中相同位置的元素相乘,MATLAB中使用“.*”运算符。在命令窗口键入下面的命令行:

code.matlab
>> x=[1 3;4 6];
>> y=[6 1;9 3];
>> z=x.*y
z =
     6     3
    36    18

【Python】

Python中矩阵元素相乘可以使用NumPy包的multiply函数。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> x=[[1,3],[4,6]]
>>> y=[[6,1],[9,3]]
>>> z=np.multiply(x,y)
>>> z
array([[ 6,  3],
       [36, 18]])

【MATLAB】

如果是一个矩阵和一个向量点乘,MATLAB使用“.*”运算符。在命令窗口键入下面的命令行:

code.matlab
>> x=[1 3;4 6];
>> a=[2 5];
>> z=x.*a
z =
	2	15
	8	30

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[[1,3],[4,6]]
>>> a=[2,5]
>>> z=np.multiply(x,a)
>>> z
array([[ 2, 15],
       [ 8, 30]])

【MATLAB】

如果是两个向量点乘,MATLAB使用“.*”运算符。在命令窗口键入下面的命令行:

code.matlab
>> x=[3 10 5 6 19];
>> y=[6 2 9 12 9];
>> z=x.*y
z =
	18	20	45	72	171

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[3,10,5,6,19]
>>> y=[6,2,9,12,9]
>>> z=np.multiply(x,y)
>>> z
array([ 18,  20,  45,  72, 171])

【MATLAB】

如果是一个矩阵和一个标量相乘,MATLAB使用“.*”和“*”运算符得到相同的结果。在命令窗口键入下面的命令行:

code.matlab
>> x=[1 3;4 6];
>> a=10;
>> z=x.*a    %或z=x*a
z =
	10	30
	40	60

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[[1,3],[4,6]]
>>> z=np.multiply(x,10)
>>> z
array([[10, 30],
       [40, 60]])

矩阵除法有矩阵相除和矩阵点除之分。点除是将两个矩阵中的对应元素相除。

【MATLAB】

给定两个矩阵x和y,求y除以x。MATLAB中可以用“\”进行计算。在命令窗口键入下面的命令行:

code.matlab
>> x=[1 3;4 6];
>> y=[6 1;9 3];
>> z=x\y
z =
   -1.5000    0.5000
    2.5000    0.1667

【Python】

Python中计算y矩阵除以x矩阵,先求x的逆矩阵,再乘以y。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[[1,3],[4,6]]
>>> y=[[6,1],[9,3]]
>>> z=np.linalg.inv(x)
>>> z=np.dot(z,y)
>>> z
array([[-1.5       ,  0.5       ],
       [ 2.5       ,  0.16666667]])

【MATLAB】

点除的情况,在MATLAB中使用“.\”运算符。在命令窗口键入下面的命令行:

code.matlab
>> x=[1 3;4 6];
>> y=[6 1;9 3];
>> z=x.\y
z =
6.0000    0.3333
2.2500    0.5000

【Python】

Python中用NumPy包的divide函数计算两个矩阵的点除。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> x=[[1,3],[4,6]]
>>> y=[[6,1],[9,3]]
>>> z=np.divide(y,x)
>>> z
array([[6.        , 0.33333333],
       [2.25      , 0.5       ]])

矩阵的转置

矩阵的转置是将矩阵的元素相对于矩阵的对角线作对称变换。

【MATLAB】

MATLAB中使用transpose函数或单引号实现矩阵的转置。在命令窗口键入下面的命令行:

code.matlab
>> A=[1 4 7 10; 2 5 8 11; 3 6 9 12];
>> B=transpose(A)  %或 B=A'
B =
    1	2	3
    4	5	6
    7	8	9
	10	11	12

【Python】

Python中用NumPy包的transpose函数对矩阵进行转置。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> A=[[1,4,7,10],[2,5,8,11],[3,6,9,12]]
>>> B=np.transpose(A)
>>> B
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

矩阵的逆运算

MATLAB和Python都提供了inv函数计算给定矩阵的逆矩阵。

【MATLAB】

MATLAB中,用函数inv实现矩阵的逆运算。在命令窗口键入下面的命令行:

code.matlab
>> a=[1 2 0;2 5 -1;4 10 -1];
>> b=inv(a)
b =
     5     2    -2
    -2    -1     1
0    -2     1

【Python】

Python中用NumPy包的linalg.inv函数求矩阵的逆矩阵。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> a=[[1,2,0],[2,5,-1],[4,10,-1]]
>>> b=np.linalg.inv(a)
>>> b
array([[ 5.,  2., -2.],
       [-2., -1.,  1.],
       [-0., -2.,  1.]])

矩阵的迹

矩阵的迹是指矩阵所有对角线元素的和。MATLAB和Python中使用trace函数计算给定矩阵的迹。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> a=[1 2 0;2 5 -1;4 10 -1];
>> b=trace(a)
b =
     5

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import numpy as np
>>> a=[[1,2,0],[2,5,-1],[4,10,-1]]
>>> b=np.trace(a)
>>> b
5