这里写自定义目录标题
问题描述
因为用的是python(numpy,scipy)求解矩阵,不能跟matlab这样强大的软件对比,有些问题在matlab里面可能不会出现,但是在python里面就会出现,比如下面要讲的这个问题,就是用到了np.linalg.solve求解线性方程组Ax=B,时报的错,下面一一讲解,以及修改方法
问题:Singular matrix
求解时要求A一定是方阵[n,n],
x=np.linalg.solve(A,B)
报错“LinAlgError: Singular matrix” 是指你的A矩阵是奇异矩阵,即A的行列式为0
np.linalg.det(A) =0
尤其是你的矩阵比较大的时候,如果是稀疏矩阵,特别容易出现求解的矩阵行列式为0的情况,出现这个问题的时候可以通过将对角线的元素增加一个非常小的量(1e-6),强行改变他的行列式的值(注意如果对角线本来就有元素,只将之前为0的元素改变成小量即可,否则会改变原先的值)
a = np.ones([100,100])
b = np.zeros([2,100])
Y = np.linalg.solve(a, b[0])
print(Y)
LinAlgError: Singular matrix
修改后
a = np.ones([100,100])
b = np.zeros([2,100])
for i in range(a.shape[0]):
a[i,i]=1e-6
Y = np.linalg.solve(a, b[0])
[0,0,0, ,0,0,0]