本文簡要介紹 python 語言中 scipy.sparse.linalg.gmres
的用法。
用法:
scipy.sparse.linalg.gmres(A, b, x0=None, *, tol=<object object>, restart=None, maxiter=None, M=None, callback=None, restrt=<object object>, atol=0.0, callback_type=None, rtol=1e-05)#
使用廣義最小殘差迭代求解
Ax = b
。- A: {稀疏矩陣,ndarray,LinearOperator}
線性係統的實數或複數N-by-N 矩陣。或者,
A
可以是一個線性運算符,它可以使用例如scipy.sparse.linalg.LinearOperator
生成Ax
。- b: ndarray
線性係統的右手邊。具有形狀 (N,) 或 (N,1)。
- x0: ndarray
開始猜測解決方案(默認情況下為零向量)。
- atol, rtol: 浮點數
收斂測試的參數。為了收斂,應滿足
norm(b - A @ x) <= max(rtol*norm(b), atol)
。默認為atol=0.
和rtol=1e-5
。- restart: 整數,可選
重新啟動之間的迭代次數。較大的值會增加迭代成本,但對於收斂可能是必要的。如果省略,則使用
min(20, n)
。- maxiter: 整數,可選
最大迭代次數(重新啟動周期)。即使尚未達到指定的容差,迭代也會在 maxiter 步驟後停止。請參閱callback_type。
- M: {稀疏矩陣,ndarray,LinearOperator}
A 的預條件子的逆。M 應該近似於 A 的逆,並且很容易求解(參見注釋)。有效的預處理可以顯著提高收斂速度,這意味著達到給定的容錯能力所需的迭代次數更少。默認情況下,不使用預處理器。在此實現中,使用左預處理,並且最小化預處理殘差。然而,最終的收斂是針對
b - A @ x
殘差進行測試的。- callback: 函數
每次迭代後調用的用戶提供的函數。它被稱為回調(args),其中args由callback_type選擇。
- callback_type: {‘x’, ‘pr_norm’, ‘legacy’},可選
- 請求的回調函數參數:
x
:當前迭代(ndarray),每次重新啟動時調用pr_norm
:相對(預處理)殘差範數(浮點),在每次內部迭代時調用legacy
(默認):與pr_norm
,但也改變了含義馬克西特計算內部迭代而不是重新啟動周期。
如果未設置回調,則該關鍵字無效。
- restrt: int,可選,已棄用
- tol: 浮點數,可選,已棄用
- x: ndarray
融合解決方案。
- info: int
- 提供收斂信息:
0:成功退出 >0:未達到容差收斂,迭代次數
參數 ::
返回 ::
注意:
選擇預條件子 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)
例子:
>>> import numpy as np >>> 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, atol=1e-5) >>> print(exitCode) # 0 indicates successful convergence 0 >>> np.allclose(A.dot(x), b) True
相關用法
- Python SciPy linalg.get_blas_funcs用法及代碼示例
- Python SciPy linalg.gcrotmk用法及代碼示例
- Python SciPy linalg.get_lapack_funcs用法及代碼示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代碼示例
- Python SciPy linalg.cdf2rdf用法及代碼示例
- Python SciPy linalg.LaplacianNd用法及代碼示例
- Python SciPy linalg.solve_circulant用法及代碼示例
- Python SciPy linalg.polar用法及代碼示例
- Python SciPy linalg.clarkson_woodruff_transform用法及代碼示例
- Python SciPy linalg.rsf2csf用法及代碼示例
- Python SciPy linalg.hessenberg用法及代碼示例
- Python SciPy linalg.tril用法及代碼示例
- Python SciPy linalg.triu用法及代碼示例
- Python SciPy linalg.svd用法及代碼示例
- Python SciPy linalg.ishermitian用法及代碼示例
- Python SciPy linalg.invhilbert用法及代碼示例
- Python SciPy linalg.factorized用法及代碼示例
- Python SciPy linalg.lu_factor用法及代碼示例
- Python SciPy linalg.SuperLU用法及代碼示例
- Python SciPy linalg.lsqr用法及代碼示例
- Python SciPy linalg.cho_factor用法及代碼示例
- Python SciPy linalg.fractional_matrix_power用法及代碼示例
- Python SciPy linalg.eig_banded用法及代碼示例
- Python SciPy linalg.tanhm用法及代碼示例
- Python SciPy linalg.orthogonal_procrustes用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.sparse.linalg.gmres。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。