jax.scipy.sparse.linalg.gmres#

jax.scipy.sparse.linalg.gmres(A, b, x0=None, *, tol=1e-05, atol=0.0, restart=20, maxiter=None, M=None, solve_method='batched')[原始碼]#

GMRES 為給定的 A 和 b 求解線性系統 A x = b 中的 x。

A 被指定為執行 A(vi) -> vf = A @ vi 的函數,原則上不需要有任何特定的特殊屬性,例如對稱性。然而,對於近乎對稱的運算子,收斂速度通常很慢。

參數:
  • A (ndarray, function, 或 matmul-compatible object) – 2D 陣列或函數,用於計算線性映射(矩陣向量乘積)Ax,當像 A(x)A @ x 這樣呼叫時。A 必須傳回與其引數具有相同結構和形狀的陣列。

  • b (arraytree of arrays) – 線性系統的右側,表示單一向量。可以儲存為陣列或陣列的 Python 容器,具有任何形狀。

  • x0 (arraytree of arrays, optional) – 解的起始猜測值。必須與 b 具有相同的結構。如果未指定,則使用零。

  • tol (float, optional) – 收斂容忍度,norm(residual) <= max(tol*norm(b), atol)。我們沒有實作 SciPy 的「舊版」行為,因此除非您明確將 atol 傳遞給 SciPy 的 gmres,否則 JAX 的容忍度會與 SciPy 不同。

  • atol (float, optional) – 收斂容忍度,norm(residual) <= max(tol*norm(b), atol)。我們沒有實作 SciPy 的「舊版」行為,因此除非您明確將 atol 傳遞給 SciPy 的 gmres,否則 JAX 的容忍度會與 SciPy 不同。

  • restart (integer, optional) – Krylov 子空間的大小(「迭代次數」),在重新啟動之間建立。GMRES 的工作原理是將真實解 x 近似為其在此維度的 Krylov 空間中的投影 - 因此,此參數限制了任何猜測解可實現的最大準確度。較大的值會增加迭代次數和迭代成本,但對於收斂可能是必要的。如果在建立完整子空間之前達到收斂,則演算法會提前終止。預設值為 20。

  • maxiter (integer) – 從上次迭代中找到的解開始,重建大小為 restart 的 Krylov 空間的最大次數。如果 GMRES 停止或速度非常慢,則減少此參數可能會有所幫助。預設值為無限。

  • M (ndarray, function, 或 matmul-compatible object) – A 的預處理器。預處理器應近似 A 的反矩陣。有效的預處理可以顯著提高收斂速度,這意味著達到給定的誤差容忍度所需的迭代次數更少。

  • solve_method ('incremental''batched') – ‘incremental’ 求解方法在使用 Givens 旋轉的 GMRES 過程中,以增量方式建立 Krylov 子空間的 QR 分解。這提高了數值穩定性,並提供了殘差範數的免費估計,允許在單個「重新啟動」中提前終止。相反,「batched」求解方法在每次 GMRES 迭代結束時從頭開始解決最小平方問題。它不允許提前終止,但在 GPU 上的額外負擔要少得多。

傳回值:

  • x (array or tree of arrays) – 收斂的解。與 b 具有相同的結構。

  • info (None) – 收斂資訊的佔位符。在未來,JAX 將報告未達到收斂時的迭代次數,就像 SciPy 一樣。