scipy.sparse.linalg.gmres

scipy.sparse.linalg.gmres(A, b, x0=None, tol=1e-05, restart=None, maxiter=None, M=None, callback=None, restrt=None, atol=None, callback_type=None)

用广义最小残差迭代法求解 Ax = b

参数
A{稀疏矩阵,ndarray,LinearOperator}

线性系统的实数或复数的N乘N矩阵。或者, A 可以是线性运算符,它可以产生 Ax 使用,例如, scipy.sparse.linalg.LinearOperator

bndarray

线性系统的右侧。具有形状(N,)或(N,1)。

退货
xndarray

收敛的解。

info集成
提供融合信息:
  • 0:退出成功

  • >0:未达到容差收敛,迭代次数

  • <0:非法输入或细分

其他参数
x0ndarray

开始猜测解决方案(默认情况下是零向量)。

TOL,ATOL浮动,可选

收敛容差, norm(residual) <= max(tol*norm(b), atol) 。的默认设置 atol'legacy' ,它模拟不同的传统行为。

警告

的默认值 atol 将在将来的版本中进行更改。为了将来的兼容性,请指定 atol 明确地说。

restart整型,可选

重新启动之间的迭代次数。较大的值会增加迭代成本,但可能是收敛所必需的。默认值为20。

maxiter整型,可选

最大迭代次数(重新启动周期)。即使未达到指定的公差,迭代也将在最大步长后停止。

M{稀疏矩阵,ndarray,LinearOperator}

A的预条件子的逆,M应该近似于A的逆,并且易于求解(见注释)。有效的预处理极大地提高了收敛速度,这意味着需要更少的迭代来达到给定的误差容限。默认情况下,不使用任何预处理程序。

callback功能

每次迭代后要调用的用户提供的函数。它被称为 callback(args) ,在哪里 args 由以下人员选择 callback_type

callback_type{‘x’,‘PR_NORM’,‘旧版’},可选
请求的回调函数参数:
  • x :Current Iterate(Ndarray),每次重新启动时调用

  • pr_norm :相对(预处理)残差范数(浮点),在每次内部迭代中调用

  • legacy (默认):与相同 pr_norm ,而且还将“maxiter”的含义更改为计数内部迭代,而不是重新启动周期。

restrt整型,可选

已弃用-使用 restart 取而代之的是。

注意事项

预条件子P的选择使P接近A,但易于求解。此例程所需的预处理器参数为 M = P^-1 。最好不要显式计算逆数。相反,请使用以下模板生成M::

# Construct a linear operator that computes P^-1 * x.
import scipy.sparse.linalg as spla
M_x = lambda x: spla.spsolve(P, x)
M = spla.LinearOperator((n, n), M_x)

示例

>>> from scipy.sparse import csc_matrix
>>> from scipy.sparse.linalg import gmres
>>> A = csc_matrix([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float)
>>> b = np.array([2, 4, -1], dtype=float)
>>> x, exitCode = gmres(A, b)
>>> print(exitCode)            # 0 indicates successful convergence
0
>>> np.allclose(A.dot(x), b)
True