我一直面临解决由离散 PDE(特别是斯托克斯方程)引起的线性系统 Ax=b 的问题。Nively,只要 A 是稀疏的,似乎求解 Ax=b 不应该比简单地将矩阵 A 乘以某个向量 v 花费更多的时间。更具体地说,当对线性 PDE 进行离散化时,最终会得到一个稀疏矩阵 A,其第 i 行包含的非零元素与空间网格中节点 i 的最近邻居一样多,这通常是一个很小的数字。因此,求解这样一个系统似乎需要 O(n) 时间,其中 n 是(方)矩阵 A 的大小。然而,经验表明求解线性系统比执行矩阵乘法成本更高,即使在A 稀疏时的情况。在实践中,我使用在 PETSc 库中实现的 MUMPS 求解器(使用 LU 分解)。我发现当矩阵的大小超过 100,000 左右时,显式解决方案基本上不可行。另一方面,使用 100,000 个浮点数执行简单的算术运算似乎是一项微不足道的任务。我在 MATLAB 中对稀疏矩阵进行实验得出了相同的结论。例如:
A = sprand(100000,100000,0.0001) + speye(100000,100000);
v = 个(100000,1);
现在,将 A 乘以 v 需要 0.02 秒。然而,求解 A\v 需要更多的时间,即使 A 在每行大约有 10 个元素。
解决稀疏系统似乎比执行矩阵向量乘法更难有一个简单的原因吗?有什么解决办法吗?