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) – 二维数组或函数,用于在调用
A(x)或A @ x时计算线性映射(矩阵-向量乘积)Ax。A必须返回与参数具有相同结构和形状的数组。b (数组 或 数组树) – 表示单个向量的线性系统的右侧。 可以存储为数组或具有任何形状的数组的 Python 容器。
x0 (array or tree of arrays, optional) – 解的初始猜测值。必须与
b具有相同的结构。如果未指定,则使用零。tol (float, optional) – 收敛容差,
norm(residual) <= max(tol*norm(b), atol)。我们不实现 SciPy 的“遗留”行为,因此 JAX 的容差将与 SciPy 不同,除非您显式地将atol传递给 SciPy 的gmres。atol (float, optional) – 收敛容差,
norm(residual) <= max(tol*norm(b), atol)。我们不实现 SciPy 的“遗留”行为,因此 JAX 的容差将与 SciPy 不同,除非您显式地将atol传递给 SciPy 的gmres。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”解法通过 Givens 旋转在 GMRES 过程中逐步构建 Krylov 子空间的 QR 分解。这提高了数值稳定性,并提供了一个残差范数的免费估计,允许在单次“重启”内提前终止。相比之下,“batched”解法在每次 GMRES 迭代结束时从头开始求解最小二乘问题。它不允许提前终止,但在 GPU 上开销要小得多。
- 返回:
x (数组或数组树) – 收敛的解。 与
b具有相同的结构。info (None) – 收敛信息的占位符。 未来,JAX 将报告未实现收敛时的迭代次数,就像 SciPy 一样。
另请参阅
scipy.sparse.linalg.gmres,jax.lax.custom_linear_solve