人们常常把“MATLAB”直接翻译为“矩阵工作室”,顾名思义,MATLAB在矩阵分析方面的功能非常强大。事实的确如此,MATLAB总包提供了大量的矩阵操作和分析函数,利用它们可以处理常见的线性代数计算问题。介绍数组运算时,习惯上将只有一个元素的数组称为标量,将一维数组称为向量,将二维数组称为矩阵。[大谦MATLAB,dqmatlab点com]
矩阵行列式
MATLAB和Python都提供了det函数计算矩阵的行列式。
【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窗口键入下面的命令行:
>>> 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】
数组和矩阵的加减运算使用加号和减号,即“+”和“-”。
下面给定两个向量,计算它们的和。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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])
注意,下面对两个向量使用加号。
>>> z=x+y
>>> z
[3, 10, 5, 6, 19, 6, 2, 9, 12, 9]
结果是将两个向量水平方向拼接起来得到新的向量。
【MATLAB】
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窗口键入下面的命令行:
>>> 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中矩阵相乘使用“*”运算符。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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中使用“.*”运算符。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> x=[[1,3],[4,6]]
>>> y=[[6,1],[9,3]]
>>> z=np.multiply(x,y)
>>> z
array([[ 6, 3],
[36, 18]])
【MATLAB】
如果是一个矩阵和一个向量点乘,MATLAB使用“.*”运算符。在命令窗口键入下面的命令行:
>> x=[1 3;4 6];
>> a=[2 5];
>> z=x.*a
z =
2 15
8 30
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> 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使用“.*”运算符。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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使用“.*”和“*”运算符得到相同的结果。在命令窗口键入下面的命令行:
>> x=[1 3;4 6];
>> a=10;
>> z=x.*a %或z=x*a
z =
10 30
40 60
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> 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中可以用“\”进行计算。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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中使用“.\”运算符。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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函数或单引号实现矩阵的转置。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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实现矩阵的逆运算。在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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】
在命令窗口键入下面的命令行:
>> a=[1 2 0;2 5 -1;4 10 -1];
>> b=trace(a)
b =
5
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> import numpy as np
>>> a=[[1,2,0],[2,5,-1],[4,10,-1]]
>>> b=np.trace(a)
>>> b
5