【发布时间】:2020-03-25 17:46:35
【问题描述】:
我需要解决一系列稀疏线性系统Ax=b。第一个系统的解决方案x 是第二个系统的输入,第二个系统是第三个系统的输入,依此类推。由于数字错误复合和其他原因,我必须使用scipy.sparse.linalg.bicgstab 作为我的线性求解器。然而,对于一个甚至不是病态并且肯定有逆的系统,求解器会给我一个标志:“非法输入或故障”。
import numpy as np
from scipy.sparse.linalg import bicgstab, inv
from scipy import sparse
A = np.array(
[[ -1., 0., 0., 0., 0., 0., 0., 0.],
[ 0., -1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., -10., 0., 0., 0., 0., 0.],
[ 0., 0., 0., -10., 0., 0., 0., 0.],
[ 0., 0., 3., 0., -3., 0., 0., 0.],
[ 0., 0., 0., 3., 0., -3., 0., 0.],
[ 0., 0., 0., 7., 3., 0., -10., 0.],
[ 0., 0., 7., 0., 0., 3., 0., -10.]]
)
A = -sparse.csc_matrix(A)
b = np.array([ 1., 0., 10., 0., 0., 0., 0., 0.])
x, flag = bicgstab(A=A, b=b, maxiter=40, tol=1e-6)
x, flag
>>> (array([1. , 0. , 1. , 0. , 1.00118012,
0. , 0.3004875 , 0.70009946]), -10)
只是为了证明这一点
inv(A).dot(b)
>>> array([1. , 0. , 1. , 0. , 1. , 0. , 0.3, 0.7])
上面的输出正是我所期望的。有谁知道为什么 bicgstab 没有给我想要的输出?我找不到有关 bicgstab 的非法输入或故障的文档,因此我是我的问题。
【问题讨论】:
标签: python-3.x numpy scipy sparse-matrix linear-algebra