这个问题已经开放了很长时间,但我认为仍然值得回答。
在各个块上使用Krylov空间求解器作为内部前置条件的根本问题是它们不是线性算子。为了理解这一点,让我们用x~=K(A,P,τ,N;b) 通过运行Krylov空间方法获得的向量作为解 K 在线性系统上 Ax=b 最多 N 迭代或直到公差 τ 使用前置条件达到 P≈A−1。换句话说,你可以想到K 作为行动者 b。
现在注意 K(A,P,0,∞;⋅) 是线性运算符:需要求解 Ax=b 确切地,即 K(A,P,0,∞;b)=A−1b,在 b。在许多情况下,从零向量开始对Krylov空间方法进行精确的一次迭代也是将线性算子应用于b。但是因为Krylov向量的序列取决于起始残差r(0)=b−Ax(0), 运营商 K(A,P,τ,N;⋅) 通常不是有限的线性算子 N 和 τ。
这意味着如果您使用 K(A,P,τ,N;⋅) 作为线性系统的预处理器的一部分,其中 A 如果是一个块,那么您将得到一个不充当线性运算符的前置条件。
这与用于预处理的许多其他方法形成对比:例如,一个SSOR步骤是对其应用矢量的线性运算,所有其他应用定点迭代一个步骤的其他方法也是如此。
现在的根本问题是,大多数Krylov空间方法确实要求前提条件是线性算子。如果预处理器不是线性的,它们将不会收敛,从而解释您的观察。另一方面,某些Krylov空间方法(通常以单词“ Flexible”开头,例如“ Flexible GMRES”中的F-GMRES)存在变体,可以解决此问题,并且可以处理非线性的预处理器操作员。原始方法的这些灵活变体仍将收敛,并且在与良好(但非线性)的预处理器结合使用时通常是功能强大的方法。