什么时候不对稀疏线性方程组使用预处理器?

计算科学 迭代法 预处理 线性系统 格瑞斯
2021-12-21 21:04:06

我正在实现有限元方法的求解器,并使用英特尔 MKL 的 gmres 求解线性方程组。存在带和不带预处理的选项。在什么情况下不需要预处理?

矩阵稀疏且不对称。

1个回答

根据我的经验,您总是需要(或更好地使用)某种形式的预处理。前提条件的类型和复杂性会因任务而异。

来自Y. Saad,稀疏线性系统的迭代方法

预处理是 Krylov 子空间方法成功的关键因素……

相对于直接求解器,缺乏稳健性是迭代求解器的一个普遍公认的弱点。这个缺点阻碍了迭代方法在工业应用中的接受,尽管它们对非常大的线性系统具有内在吸引力。使用预处理可以提高迭代技术的效率和鲁棒性。(...) 一般来说,在处理各种应用时,迭代技术的可靠性更多地取决于预处理器的质量,而不是使用的特定 Krylov 子空间加速器。

最简单的预处理形式是Jacobi 或对角预处理器这样的预处理器可以非常快速地计算并应用于您的矩阵。它通常是用于实际问题的最小预处理类型。

所以,我想说,对于迭代求解器,至少应该使用对角线预处理。我经常听到这句话(不知道该归咎于谁):

对角线预处理器总是很便宜。有时,有效。

来自同一本 Y. Saad 的书:

此外,据观察,对于“简单问题”,简化系统通常可以仅通过对角线预处理有效地解决。

但是,如果我们假设线性系统的矩阵是对角线占优的,并且对角线上的元素彼此非常接近,那么即使对角线预处理也可能不会对事情有很大的改善。

我发现的唯一实际应用是使用没有预调节器的运行,以便将其性能与其他预调节器进行比较。然而,即使在这种情况下,我也碰巧遇到了在图表和表格中带有略微模糊标签的研究论文:“No preconditioner (Jacobi)”或“No preconditioner”暗示只使用了对角线预处理器(我后来发现试图重现结果)。

请注意,关于预处理技术的文献种类繁多,包括该社区中的许多问题:; 但是,我将我的答案限制在无前置条件方面。