本文簡要介紹 python 語言中 scipy.sparse.linalg.lgmres
的用法。
用法:
scipy.sparse.linalg.lgmres(A, b, x0=None, *, tol=1e-05, maxiter=1000, M=None, callback=None, inner_m=30, outer_k=3, outer_v=None, store_outer_Av=True, prepend_outer_v=False, atol=None)#
使用 LGMRES 算法求解矩陣方程。
LGMRES 算法 [1] [2] 旨在避免重新啟動的 GMRES 收斂中的一些問題,並且通常在較少的迭代中收斂。
- A: {稀疏矩陣,ndarray,LinearOperator}
線性係統的實數或複數N-by-N 矩陣。或者,
A
可以是一個線性運算符,它可以使用例如scipy.sparse.linalg.LinearOperator
生成Ax
。- b: ndarray
線性係統的右手邊。具有形狀 (N,) 或 (N,1)。
- x0: ndarray
開始猜測解決方案。
- tol, atol: 浮點數,可選
收斂公差,
norm(residual) <= max(tol*norm(b), atol)
.默認為atol
是tol.警告
atol 的默認值將在未來版本中更改。為了將來的兼容性,請明確指定 atol。
- maxiter: 整數,可選
最大迭代次數。即使沒有達到指定的容差,迭代也會在 maxiter 步後停止。
- M: {稀疏矩陣,ndarray,LinearOperator},可選
A 的預處理器。預處理器應該近似於 A 的逆。有效的預處理顯著提高了收斂速度,這意味著需要更少的迭代來達到給定的誤差容限。
- callback: 函數,可選
每次迭代後調用的用戶提供的函數。它被稱為 callback(xk),其中 xk 是當前解向量。
- inner_m: 整數,可選
每次外部迭代的內部 GMRES 迭代次數。
- outer_k: 整數,可選
在內部 GMRES 迭代之間攜帶的向量數。根據 [1],好的值在 1…3 的範圍內。但是,請注意,如果您想使用額外的向量來加速解決多個類似問題,較大的值可能是有益的。
- outer_v: 元組列表,可選
包含元組的列表
(v, Av)
向量和相應的matrix-vector 乘積,用於增強 Krylov 子空間,並在內部 GMRES 迭代之間進行。元素Av
可None如果應該重新評估matrix-vector 產品。此參數通過以下方式就地修改lgmres
, 並且可用於在解決類似問題時將“guess” 向量傳入和傳出算法。- store_outer_Av: 布爾型,可選
LGMRES 是否應該在 outer_v 列表中除了向量 v 之外還存儲 A@v。默認為真。
- prepend_outer_v: 布爾型,可選
是否在 Krylov 迭代之前放置 outer_v 擴充向量。在標準 LGMRES 中,prepend_outer_v=False。
- x: ndarray
融合解決方案。
- info: int
提供收斂信息:
0 : successful exit
>0 : convergence to tolerance not achieved, number of iterations
<0 : illegal input or breakdown
參數 ::
返回 ::
注意:
LGMRES 算法 [1] [2] 旨在避免由於交替殘差向量而導致重新啟動的 GMRES 中收斂速度變慢。通常,它在某些方麵通常優於可比較的內存要求的 GMRES(m),或者至少不會差很多。
該算法的另一個優點是您可以在 outer_v 參數中為其提供 ‘guess’ 向量,以增加 Krylov 子空間。如果解決方案接近這些向量的跨度,則算法收斂速度更快。如果需要一個接一個地反轉幾個非常相似的矩陣,這可能很有用,例如在 Newton-Krylov 迭代中,雅可比矩陣在非線性步驟中通常變化很小。
參考:
[1] (1,2,3)A.H. Baker 和 E.R. Jessup 和 T. Manteuffel,“加速重啟 GMRES 收斂的技術”,SIAM J. Matrix Anal。應用程序。 26, 962 (2005)。
[2] (1,2)A.H. Baker,“關於提高線性求解器的性能重新啟動 GMRES”,PhD 論文,科羅拉多大學(2003 年)。
例子:
>>> import numpy as np >>> from scipy.sparse import csc_matrix >>> from scipy.sparse.linalg import lgmres >>> A = csc_matrix([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float) >>> b = np.array([2, 4, -1], dtype=float) >>> x, exitCode = lgmres(A, b, atol=1e-5) >>> print(exitCode) # 0 indicates successful convergence 0 >>> np.allclose(A.dot(x), b) True
相關用法
- Python SciPy linalg.lu_factor用法及代碼示例
- Python SciPy linalg.lsqr用法及代碼示例
- Python SciPy linalg.lu_solve用法及代碼示例
- Python SciPy linalg.lu用法及代碼示例
- Python SciPy linalg.logm用法及代碼示例
- Python SciPy linalg.ldl用法及代碼示例
- Python SciPy linalg.leslie用法及代碼示例
- Python SciPy linalg.lsmr用法及代碼示例
- Python SciPy linalg.lobpcg用法及代碼示例
- Python SciPy linalg.lstsq用法及代碼示例
- 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.SuperLU用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.sparse.linalg.lgmres。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。