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')[source]#
GMRES 求解线性方程组 A x = b 中的 x,已知 A 和 b。
A 被指定为执行 A(vi) -> vf = A @ vi 的函数,原则上不需要具有任何特定特殊属性,例如对称性。但是,对于几乎对称的算子,收敛速度通常很慢。
- 参数:
A (ndarray, function, or matmul-compatible object) – 2D 数组或函数,在作为
A(x)
或A @ x
被调用时计算线性映射(矩阵向量乘积)Ax
。A
必须返回与其参数具有相同结构和形状的数组。b (数组 或 树 的 数组) – 线性系统右侧表示单个向量。可以存储为数组或任何形状的数组(树)的 Python 容器。
x0 (数组 或 树 的 数组, 可选) – 解决方案的初始猜测。必须与
b
具有相同的结构。如果未指定,则使用零。tol (浮点数, 可选) – 收敛容差,
norm(residual) <= max(tol*norm(b), atol)
。我们没有实现 SciPy 的“遗留”行为,因此除非您显式地将atol
传递给 SciPy 的gmres
,否则 JAX 的容差将与 SciPy 不同。atol (浮点数, 可选) – 收敛容差,
norm(residual) <= max(tol*norm(b), atol)
。我们没有实现 SciPy 的“遗留”行为,因此除非您显式地将atol
传递给 SciPy 的gmres
,否则 JAX 的容差将与 SciPy 不同。restart (整数, 可选) – 重启之间构建的 Krylov 子空间大小(“迭代次数”)。GMRES 通过将真实解 x 近似为其在此维度的 Krylov 空间中的投影来工作 - 因此此参数限制了从任何猜测解获得的最大精度。较大的值会增加迭代次数和迭代成本,但对于收敛可能很有必要。如果在构建完整子空间之前达到收敛,算法会提前终止。默认值为 20。
maxiter (整数) – 从上一次迭代中找到的解开始,重建大小为
restart
的 Krylov 空间的最大次数。如果 GMRES 停止或速度很慢,减少此参数可能会有所帮助。默认值为无穷大。M (ndarray, 函数 或 与矩阵乘法兼容的对象) – A 的预处理器。预处理器应近似于 A 的逆。有效的预处理会显着提高收敛速度,这意味着达到给定误差容差所需的迭代次数更少。
solve_method ('incremental' 或 'batched') – “增量”求解方法在 GMRES 过程中使用 Givens 旋转增量地为 Krylov 子空间构建 QR 分解。这提高了数值稳定性,并给出了残差范数的免费估计,允许在单个“重启”内提前终止。相比之下,“批处理”求解方法在每次 GMRES 迭代结束时从头开始解决最小二乘问题。它不允许提前终止,但在 GPU 上的开销要小得多。
- 返回:
x (数组或数组树) – 收敛的解。与
b
具有相同的结构。info (无) – 作为收敛信息占位符。将来,JAX 将报告未达到收敛时的迭代次数,类似于 SciPy。