当前位置:   article > 正文

用numpy.linalg.solve 矩阵求解 线性方程组求解 时遇到Singular matrix 或者求解出来全是nan_numpy.linalg.linalgerror: singular matrix

numpy.linalg.linalgerror: singular matrix

这里写自定义目录标题

问题描述

因为用的是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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

修改后

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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/96573
推荐阅读
相关标签
  

闽ICP备14008679号