如何重新排序变量以产生最小带宽的带状矩阵?

计算科学 线性代数 pde 有限差分 稀疏矩阵 带状矩阵
2021-12-21 16:55:59

我正在尝试通过有限差分求解二维泊松方程。在这个过程中,我得到了一个稀疏矩阵,每个方程中只有变量。例如,如果变量是,那么离散化将产生:5U

Ui1,j+Ui+1,j4Ui,j+Ui,j1+Ui,j+1=fi,j

我知道我可以通过迭代方法求解这个系统,但我想到如果我对变量进行适当排序,我可能能够获得一个可以通过直接方法求解的带状矩阵(即,高斯消去 w /o 旋转)。这可能吗?是否有任何策略可以为其他可能不太结构化的稀疏系统执行此操作?

4个回答

这是稀疏直接求解器领域中一个经过充分研究的问题。我强烈建议阅读 Joseph Liu对多前额方法的概述,以便更好地了解重新排序和超级节点如何影响填充和求解时间。

嵌套剖析是一种非常常见的生成重新排序的方法,本质上由递归图分区组成。MeTiS是图形分区的事实标准,您可以在此处阅读有关它背后的一些想法。另一个常用的包是SCOTCHChaco也很重要,因为它的作者介绍了多级图分区,这也是MeTiS 背后的基本思想

George 和 Liu在他们的经典著作中表明 ,2d sparse-direct 解决方案只需要工作和内存,而 3d sparse-direct 需要工作和内存。O(n3/2)O(nlogn)O(n2)O(n4/3)

Cuthill-McKee您想做的事情的事实上的标准。如果您想使用此方法, Boost Graph Library (BGL)中有一个易于使用的算法(及其反向)实现,文档包含如何使用它的示例。

说到多前沿方法,从事 LU 分解的多前沿方法 ( UMFPACK ) 的Tim Davis有许多例程可以重新排序矩阵以最小化填充。作为SuiteSparse的一部分,您可以在此处找到它们。SuiteSparse 使用 MeTiS。

另一件需要注意的事情:在某些问题中,您可以巧妙地对变量进行排序,以便获得带状或接近带状的模式,这可以为您节省调用这些算法的麻烦(和 CPU 时间)。但是,这种巧妙的重新排序需要您的洞察力,并且远不如人们在此处的答案中提到的基于图论的重新排序算法那么普遍。

在应用数学界有一种称为 ADI(隐式交替方向)的算法,在物理界有一种称为拆分运算符的算法,基本上可以满足您的描述。这是一种迭代方法,它遵循以下基本过程:

  1. 对于每个值y, 放松x-方向。该矩阵应该是三对角矩阵,因此可以在相对较短的时间内直接求解。

  2. 对于每个值x, 放松y-方向。同样,这应该很快。

  3. 重复 1 和 2,直到误差尽可能小。

我不知道这个算法的形式复杂性,但我发现它每次使用它时收敛的迭代次数都比 Jacobi 和 Gauss-Seidel 少。