我正在实现有限元方法的求解器,并使用英特尔 MKL 的 gmres 求解线性方程组。存在带和不带预处理的选项。在什么情况下不需要预处理?
矩阵稀疏且不对称。
我正在实现有限元方法的求解器,并使用英特尔 MKL 的 gmres 求解线性方程组。存在带和不带预处理的选项。在什么情况下不需要预处理?
矩阵稀疏且不对称。
根据我的经验,您总是需要(或更好地使用)某种形式的预处理。前提条件的类型和复杂性会因任务而异。
预处理是 Krylov 子空间方法成功的关键因素……
相对于直接求解器,缺乏稳健性是迭代求解器的一个普遍公认的弱点。这个缺点阻碍了迭代方法在工业应用中的接受,尽管它们对非常大的线性系统具有内在吸引力。使用预处理可以提高迭代技术的效率和鲁棒性。(...) 一般来说,在处理各种应用时,迭代技术的可靠性更多地取决于预处理器的质量,而不是使用的特定 Krylov 子空间加速器。
最简单的预处理形式是Jacobi 或对角预处理器。这样的预处理器可以非常快速地计算并应用于您的矩阵。它通常是用于实际问题的最小预处理类型。
所以,我想说,对于迭代求解器,至少应该使用对角线预处理。我经常听到这句话(不知道该归咎于谁):
对角线预处理器总是很便宜。有时,有效。
来自同一本 Y. Saad 的书:
此外,据观察,对于“简单问题”,简化系统通常可以仅通过对角线预处理有效地解决。
但是,如果我们假设线性系统的矩阵是对角线占优的,并且对角线上的元素彼此非常接近,那么即使对角线预处理也可能不会对事情有很大的改善。
我发现的唯一实际应用是使用没有预调节器的运行,以便将其性能与其他预调节器进行比较。然而,即使在这种情况下,我也碰巧遇到了在图表和表格中带有略微模糊标签的研究论文:“No preconditioner (Jacobi)”或“No preconditioner”暗示只使用了对角线预处理器(我后来发现试图重现结果)。
请注意,关于预处理技术的文献种类繁多,包括该社区中的许多问题:预处理; 但是,我将我的答案限制在无前置条件方面。