嵌套预处理器指南

计算科学 预处理 克雷洛夫法
2021-12-24 08:53:50

考虑这样一种情况,您想使用预条件 Krylov 方法求解线性系统,但应用预条件器本身涉及求解辅助系统,这是使用另一种预条件 Krylov 方法完成的。

  • 在一个极端情况下,您可以运行内部求解以在外部求解的每个步骤中收敛。

  • 在另一个极端,您根本无法进行内部求解,而是将其替换为内部预处理器。

  • 在中间的某个地方,您可以在一些固定的迭代次数后截断内部 Krylov 循环,或者在达到一定的容差后截断。

根据经验,我遇到过第一个极端更好的情况,以及第二个极端更好的不同情况(就总成本而言)。但是,我找不到明确的理由说明为什么某些情况更倾向于一种策略而不是另一种策略。

关于这些不同的策略何时更可取,是否有任何指导或理论?

1个回答

这个问题已经开放了很长时间,但我认为它仍然值得回答。

在单个块上使用 Krylov 空间求解器作为内部预处理器的基本问题是它们不是线性算子。为了理解这一点,让我们用表示通过在线性系统最多次迭代得到的向量作为解或直到达到公差,使用预处理器换句话说,您可以将视为作用于的运算符。x~=K(A,P,τ,N;b)KAx=bNτPA1Kb

现在注意是一个线性算子:它需要精确求解,即中是线性的在许多情况下,对从零向量开始的恰好一次迭代运行 Krylov 空间方法也是应用于的线性算子。但是因为 Krylov 向量的序列取决于起始残差K(A,P,0,;)Ax=bK(A,P,0,;b)=A1bbbr(0)=bAx(0), 运营商K(A,P,τ,N;)通常不是有限的线性算子Nτ.

这意味着如果你使用K(A,P,τ,N;)作为线性系统的预处理器的一部分,其中A是一个块,那么您最终会得到一个不充当线性运算符的预处理器。

这与用于预处理的许多其他方法形成对比:例如,一个 SSOR 步骤是对您应用它的向量的线性运算,所有其他方法都应用一个定点迭代的一个步骤。

现在的基本问题是大多数 Krylov 空间方法确实要求预条件子是线性算子。如果预处理器不是线性的,它们将根本不会收敛,从而解释您的观察。另一方面,有一些 Krylov 空间方法的变体——通常以单词“Flexible”为前缀,例如“Flexible GMRES”中的 F-GMRES——可以解决这个问题,并且可以处理非线性的预处理器运营商。原始方法的这些灵活变体仍然会收敛,并且在与良好(但非线性)的预处理器结合使用时通常是强大的方法。