scipy.sparse.linalg.tfqmr¶
- scipy.sparse.linalg.tfqmr(A, b, x0=None, tol=1e-05, maxiter=None, M=None, callback=None, atol=None, show=False)[源代码]¶
用无转置的准最小残差迭代法求解
Ax = b
。- 参数
- A{稀疏矩阵,ndarray,LinearOperator}
线性系统的实数或复数的N乘N矩阵。或者, A 可以是线性运算符,它可以产生
Ax
使用,例如,scipy.sparse.linalg.LinearOperator
。- b{ndarray}
线性系统的右侧。具有形状(N,)或(N,1)。
- x0{ndarray}
开始猜测解决方案。
- TOL,ATOL浮动,可选
收敛容差,
norm(residual) <= max(tol*norm(b-Ax0), atol)
。的默认设置 tol 是1.0E-5。的默认设置 atol 是tol * norm(b-Ax0)
。警告
的默认值 atol 将在将来的版本中进行更改。为了将来的兼容性,请指定 atol 明确地说。
- maxiter整型,可选
最大迭代次数。即使未达到指定的公差,迭代也将在最大步长后停止。默认值为
min(10000, ndofs * 10)
,在哪里ndofs = A.shape[0]
。- M{稀疏矩阵,ndarray,LinearOperator}
A的预条件子的逆,M应该近似于A的逆,并且易于求解(见注释)。有效的预处理极大地提高了收敛速度,这意味着需要更少的迭代来达到给定的误差容限。默认情况下,不使用任何预处理程序。
- callback函数,可选
每次迭代后要调用的用户提供的函数。它被称为 callback(xk) ,在哪里 xk 是当前的解向量。
- show布尔值,可选
指定
show = True
为了显示汇聚,show = False
就是关闭输出的收敛。默认值为 False 。
- 退货
- xndarray
收敛的解。
- info集成
提供融合信息:
0:退出成功
>0:未达到容差收敛,迭代次数
<0:非法输入或细分
注意事项
无转置QMR算法是在CGS算法的基础上发展而来的。然而,与CGS不同的是,TFQMR方法的收敛曲线是通过计算残差范数的拟最小化来平滑的。该实现支持左预条件,收敛准则中要计算的“剩余范数”实际上是实际剩余范数的一个上界
||b - Axk||
。参考文献
- 1
R·W·弗洛因德,一种求解非厄米线性系统的无转置准最小残差算法,SIAM J.Sci。计算机,14(2),470-482,1993。
- 2
Y.Saad,稀疏线性系统的迭代方法,第2版,SIAM,费城,2003。
- 3
凯利,线性和非线性方程的迭代方法,第16期,应用数学前沿,SIAM,费城,1995。
示例
>>> from scipy.sparse import csc_matrix >>> from scipy.sparse.linalg import tfqmr >>> A = csc_matrix([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float) >>> b = np.array([2, 4, -1], dtype=float) >>> x, exitCode = tfqmr(A, b) >>> print(exitCode) # 0 indicates successful convergence 0 >>> np.allclose(A.dot(x), b) True