jax.scipy.sparse.linalg.bicgstab#
- jax.scipy.sparse.linalg.bicgstab(A, b, x0=None, *, tol=1e-05, atol=0.0, maxiter=None, M=None)[源代码]#
使用双共轭梯度稳定迭代来解
Ax = b
。JAX 的
bicgstab
的数值计算结果应该与 SciPy 的bicgstab
完全匹配(在数值精度范围内),但请注意,接口略有不同:你需要将线性算子A
作为函数提供,而不是稀疏矩阵或LinearOperator
。与
cg
一样,bicgstab
的导数是通过隐式微分实现的,使用另一个bicgstab
求解,而不是通过对求解器进行微分。只有当两个求解都收敛时,它们才是准确的。- 参数:
A (ndarray, 函数, 或 matmul兼容对象) – 2D 数组或函数,当像
A(x)
或A @ x
这样调用时,计算线性映射(矩阵-向量乘积)Ax
。A
可以表示任何通用(非对称)线性算子,函数必须返回与其参数具有相同结构和形状的数组。b (数组 或 数组树) – 线性系统的右侧,表示单个向量。可以存储为数组或具有任意形状的数组 Python 容器。
x0 (数组 或 数组树) – 解的起始猜测值。必须与
b
具有相同的结构。tol (float, 可选) – 收敛的容差,
norm(residual) <= max(tol*norm(b), atol)
。我们没有实现 SciPy 的“遗留”行为,因此除非你显式地将atol
传递给 SciPy 的cg
,否则 JAX 的容差将与 SciPy 不同。atol (float, 可选) – 收敛的容差,
norm(residual) <= max(tol*norm(b), atol)
。我们没有实现 SciPy 的“遗留”行为,因此除非你显式地将atol
传递给 SciPy 的cg
,否则 JAX 的容差将与 SciPy 不同。maxiter (整数) – 最大迭代次数。即使未达到指定的容差,迭代也会在 maxiter 步后停止。
M (ndarray, 函数, 或 matmul兼容对象) – A 的预处理器。预处理器应近似 A 的逆。有效的预处理可以显著提高收敛速度,这意味着需要更少的迭代次数才能达到给定的误差容差。
- 返回值:
x (数组 或 数组树) – 收敛的解。与
b
具有相同的结构。info (None) – 收敛信息的占位符。将来,当未实现收敛时,JAX 将报告迭代次数,就像 SciPy 一样。