0

我对矩阵不是很好,而且在大多数情况下我不知道自己在做什么,因为我正在尝试修复别人的代码。

有问题的代码是new_vals = scipy.sparse.linalg.spsolve(A,b)其中 A 是具有以下维度的稀疏矩阵:(1146880, 1146880),并且b是 (1146880, 1)。当 python 崩溃时,没有错误,我很确定它没有内存不足。一些搜索表明它是堆栈溢出的一种形式,因此我尝试使用 bicg 制定不同的解决方案,但new_vals,check = scipy.sparse.linalg.bicg(A,b)似乎并不总是有效。

他们有什么方法可以让 spsolve 工作吗?还是有其他方法可以做到这一点?

编辑:我之前说过两个矩阵的大小相同,但是b是 (1146880, 1)。

4

1 回答 1

0

1)“似乎并不总是有效”是什么意思?bicg失败了吗info!=0?这不足为奇,而且它可能发生,因为它A是不可逆的。输入,特别是 matrixA是否有可能是错误的?

2)spsolve在相同的情况下会失败bicg吗?

编辑:在回复评论时,我不相信 spsolve。这是一个失败的例子:

import scipy.sparse
import scipy.sparse.linalg

A=scipy.sparse.csc_matrix(linspace(1,15,16).reshape((4,4)))
b=ones((4))
res_spsolve=scipy.sparse.linalg.spsolve(A,b)
res_bicg,info=scipy.sparse.linalg.bicg(A,b)


b_bicg = A*res_bicg
b_spsolve = A*res_spsolve

你会看到 b_spsolve 是错误的

于 2012-08-29T14:03:13.523 回答