用Python解矩阵方程,可以用两个模块——Numpy和Sympy
矩阵方程:Ax=b
A为系数矩阵,b为解集矩阵
令B为A的增广矩阵
1、Ax=b无解的充要条件:r(A)+1=r(B)
2、Ax=b唯一解的充要条件:r(A)=r(B)=n
3、Ax=b无穷多解的充要条件:r(A)=r(B)<n
1、Numpy
这里要用到numpy.linalg模块
import numpy as np
# numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等
from numpy.linalg import *
p1 = np.array([[1,2],[3,4]])
y = np.array([[5],[9]])
print(solve(p1,y))
p2 = np.array([[1,3,4],[2,3,4]])
print(solve(p1,p2))
p3 = np.array([[1,0,3],[2,5,4],[3,4,5]])
p4 = np.array([[1,3,4],[2,7,4],[6,5,8]])
print(solve(p3,p4))
结果:
[[-1.]
[ 3.]]
[[ 0. -3. -4. ]
[ 0.5 3. 4. ]]
[[ 4.75 -3. 3. ]
[-0.5 1. -0.66666667]
[-1.25 2. 0.33333333]]
用这个模块求解矩阵方程时,有一个缺点,就是:
系数矩阵A必须为n×n
相应的b矩阵为n×m
如果矩阵A不满足n×n,会出现下面的情况:
import numpy as np
# numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等
from numpy.linalg import *
y = np.array([[5],[9]])
p2 = np.array([[1,3,4],[2,3,5]])
print(solve(p2,y))
结果:
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square