解决 Ax=b 的新提议方法是否必须击败 matlab 命令“A\b”才能成功?

计算科学 matlab
2021-11-30 06:24:54

我有一个关于直接和迭代方法的问题。包括我在内的很多人经常说,对于非常大的稀疏线性系统, Ax=b,由于cpu内存的原因,需要迭代方法。我也相信这种想法。

但是,最近几天,我发现用于大型稀疏系统的 MATLAB 直接方法命令A\b也很快。所以,在我看来,如果作者提出一种新的迭代方法,他/她必须比较新方法和 MATLAB A\b之间的 cpu 时间。如果他的方法比 A\b 快,那么我相信他的新迭代方法更好,更成功。否则,如果一种方法无法击败 MATLAB A\b,我无法相信一种新的迭代方法是成功的实际上,在大多数论文中,大多数人不会将其数值示例中的 CPU 时间与A\b进行比较。所以我还是怀疑他们所谓的更好的方法。

那么,我们是否应该将我们的新迭代方法与 matlab A\b的 cpu 时间进行比较?因为我觉得如果能打败matlab函数,那会更有说服力,对吧?如果没有,那么我们会更喜欢matlab的内置函数,对吧?谢谢。

1个回答

在不了解有关稀疏矩阵的更具体信息的情况下,几乎不可能说直接求解器是否会优于迭代求解器,反之亦然。直接求解器的关键问题是填充,它发生在分解阶段并导致大量额外的内存消耗。但并非所有稀疏矩阵在与直接求解器一起使用时都会具有毁灭性的填充。例如,通常可以用很少的额外中间存储器来求解三对角矩阵,因此假设旋转对于稳定性来说不是必需的,即使在今天的工作站上有数十亿行,求解三对角系统也是相当常规的。

另一方面,如果矩阵来自 3D 偏微分方程,那么您将非常幸运地在当今的典型工作站上拟合包含超过 1000 万行的系统的因式分解(比如说 128 GB 的 RAM ),即使事先完成了一流的填充减少订购。

因此,系统的大小通常被用作何时切换到迭代的指导方针,但真正的问题是系统的结构以及它如何有助于分解过程中的填充。如果该结构导致大量填充,则有必要切换到迭代方法。但是迭代方法永远不会完全消除对直接方法的依赖,因为它们需要预处理器,而预处理器的构建块几乎总是直接求解器。

在过去十年左右的时间里,人们一直在研究压缩技术来处理填充问题,特别是在那些使填充非常糟糕的系统上。我认为这些技术还没有进入主流直接求解器,但是当它们这样做时,它可能会改变人们对何时需要切换到迭代求解器的思考方式。