【发布时间】:2020-04-20 15:22:31
【问题描述】:
考虑以下代码:
import numpy as np
import scipy.sparse.linalg
# Setup
A = scipy.sparse.csc_matrix([[1, -3], [-1, 4]])
b = np.array([1, 0])
spilu = scipy.sparse.linalg.spilu(A) # Find ILU decomposition
x = spilu.solve(b) # Use an iterative method to solve Ax = b ?
这导致x 成为Ax = b 的解决方案。
据我了解,scipy.sparse.linalg.spilu(A) 计算的是 A 的不完全 LU 分解。
我的问题是:spilu.solve(b) 究竟使用什么算法来求解Ax = b?
我希望它使用一些迭代方法,例如共轭梯度法,因为这似乎是使用不完全 LU 分解的正常方法。但是,我一直无法找到支持或不同意这一点的文档。此外,我很困惑,因为我看到有些人将LinearOperator 和scipy.sparse.linalg.cg/scipy.sparse.linalg.cg 与scipy.sparse.linalg.spilu(A) 结合使用,如果我的假设是正确的(for example),这似乎很愚蠢。
【问题讨论】:
-
你真的很深入,但如果你想追求这个 - 你可以看看源代码。您使用的模块调用: return _superlu.gstrf(N, A.nnz, A.data, A.indices, A.indptr, ilu=True, options=_options) gstrf 是 superlu 包中的一种方法(它不在 python 中) - 您可以尝试在他们的文档中查看他们如何计算 ILU。