scipy.sparse.linalg.

minres#

scipy.sparse.linalg.minres(A, b, x0=None, *, rtol=1e-05, shift=0.0, maxiter=None, M=None, callback=None, show=False, check=False)[source]#

使用最小殘差迭代法來解 Ax=b

MINRES 針對實對稱矩陣 A,最小化 norm(Ax - b)。與共軛梯度法不同,A 可以是不定或奇異的。

如果 shift != 0,則此方法解 (A - shift*I)x = b

參數:
A{稀疏陣列, ndarray, 線性算子}

線性系統的實對稱 N 乘 N 矩陣。或者,A 可以是一個線性算子,可以使用例如 scipy.sparse.linalg.LinearOperator 來產生 Ax

bndarray

線性系統的右側。形狀為 (N,) 或 (N,1)。

回傳值:
xndarray

收斂的解。

infointeger
提供收斂資訊

0 : 成功退出 >0 : 未達到收斂容忍度,迭代次數 <0 : 非法輸入或崩潰

其他參數:
x0ndarray

解的起始猜測值。

shiftfloat

應用於系統 (A - shift * I)x = b 的值。預設值為 0。

rtolfloat

要達到的容忍度。當相對殘差低於 rtol 時,演算法終止。

maxiterinteger

最大迭代次數。即使尚未達到指定的容忍度,迭代也會在 maxiter 步後停止。

M{稀疏陣列, ndarray, 線性算子}

A 的預處理器。預處理器應近似於 A 的逆矩陣。有效的預處理可以顯著提高收斂速度,這意味著達到給定的誤差容忍度所需的迭代次數更少。

callbackfunction

使用者提供的函數,在每次迭代後呼叫。它被呼叫為 callback(xk),其中 xk 是當前解向量。

showbool

如果 True,則在迭代期間印出與解相關的摘要和指標。預設值為 False

checkbool

如果 True,則執行額外的輸入驗證,以檢查 AM(如果指定)是否為對稱矩陣。預設值為 False

參考文獻

稀疏不定線性方程組的解法,

C. C. Paige and M. A. Saunders (1975), SIAM J. Numer. Anal. 12(4), pp. 617-629. https://web.stanford.edu/group/SOL/software/minres/

此檔案是以下 MATLAB 實作的翻譯

https://web.stanford.edu/group/SOL/software/minres/minres-matlab.zip

範例

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