jax.scipy.sparse.linalg.gmres

目录

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 x = b 以求 x,给定 A 和 b。

A 被指定为一个执行 A(vi) -> vf = A @ vi 的函数,原则上不需要具有任何特定的特殊属性,例如对称性。然而,对于几乎对称的算子,收敛通常很慢。

参数:
  • A (ndarray, function, or matmul-compatible object) – 二维数组或函数,用于计算线性映射(矩阵-向量乘积)``Ax``,当以``A(x)``或``A @ x``的形式调用时。``A``必须返回与其参数具有相同结构和形状的数组。

  • b (array or tree of arrays) – 线性系统表示的单个向量的右侧。可以存储为具有任意形状的数组或Python容器的数组。

  • x0 (array or tree 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, or matmul-compatible object) – A 的预处理器。预处理器应近似 A 的逆。有效的预处理显著提高了收敛速度,这意味着达到给定误差容限所需的迭代次数更少。

  • solve_method ('incremental' or 'batched') – ‘incremental’ 求解方法在 GMRES 过程中使用 Givens 旋转增量地为 Krylov 子空间构建 QR 分解。这提高了数值稳定性,并提供了一个免费的残差范数估计,允许在单个“重启”内提前终止。相比之下,‘batched’ 求解方法在每次 GMRES 迭代结束时从头开始求解最小二乘问题。它不允许提前终止,但在 GPU 上的开销要小得多。

返回:

  • x (数组或数组的树) – 收敛的解。结构与 b 相同。

  • info (None) – 收敛信息的占位符。未来,JAX 将在未达到收敛时报告迭代次数,类似于 SciPy。