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

这里写自定义目录标题

问题描述

因为用的是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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值