块矩阵:LU 分解的最佳填充减少

计算科学 稀疏矩阵 矩阵分解 块分解
2021-12-22 01:54:01

考虑一个正方形N×N块矩阵A,其中每个n×nAii要么是密集块,要么是零块。因此,N表示块的数量,n表示每个正方形块的大小。

随机示例:

A=[A110A13A140A21A2200A2500A33A34000A43A440A51000A55]

现在,想用最少的填充计算这个块矩阵的 LU 分解。

我通常知道用于减少一般稀疏矩阵填充的算法。说,Matlab 参考概述了几种方法及其对 Cholesky 分解的影响。然而,这些算法肯定不会给出最优的重新排序来为保持零的分解给出最优的结构。这样做有一个很好的理由:对于一个大的稀疏矩阵,找到一个最佳的重新排序是非常昂贵的、不需要的,并且与常见的相对快速的技术相比不太可能带来实质性的好处。

但是,我想知道对于块矩阵的分解是否会略有不同。在这种情况下,N小了一个数量级,人们可能愿意使用非常昂贵的 [graph?] 算法来找到给定块模式的最佳填充。

我想知道:

  • 我应该看什么系列的算法?
  • 是否有关于减少填充这方面的规范参考?(我的搜索经常被减少填充简单稀疏矩阵的结果所淹没,而不是具有其自身特点的分块情况——因为更昂贵的算法可能变得可行)?
  • 对于相对较小的N来说,这甚至是一个明显的问题吗?

笔记:

  • 在这个例子中,为简单起见,所有块都具有相同的n×n大小,我对此很感兴趣。我可能对每个块仍然是正方形的示例感兴趣,但块大小不同。
  • 对于我的应用程序,块数N的范围可以从 1(微不足道)到例如 100,并且n大约为数千(这根本n)。
  • 我愿意花费大量的预计算时间(比如 10 ×tLU)来分析模式并提出最佳重新排序
2个回答

不幸的是,最优重新排序是 NP 完全的,所以这个空间中的所有算法都是启发式的。乍一看,我的直觉是尝试一些最小度数的变体,主要是因为基于二分法的算法(嵌套剖分/递归光谱二分法)似乎并不真正适用..它们的启发式方法有点植根于几何/稀疏2D/3D 网格的连通性。

特定示例的有趣之处在于该模式不是对称的,并且广泛使用的大多数重新排序代码都用于对称矩阵或近对称扰动。我认为KLU 是一个值得注意的例外,它是一个稀疏求解器,不是为对称/FEM 量身定制的(它适用于电路)。也许看看它如何重新排序矩阵?

对于极少量的块(少于 7 个左右?),总是有可能尝试每个排列,对模式执行符号分解,然后只选择最好的?我不认为我会推荐这个,因为它不会扩展,但如果你知道 N 的上限,那么尝试它可能很容易。

我不知道这是否对您有帮助(因为它是一个较晚的答案并且您已经接受了另一个答案)但是在https://hal.archives-ouvertes.fr中有一个关于带宽最小化算法的不错的文献综述/hal-01166658/文档

我认为矩阵是一个图,并将每个块折叠成一个节点,即如果有向图的两个节点(对应于非对称稀疏矩阵)通过双向边连接,然后折叠它们。这最终会显着减少图形大小,以至于大多数带宽最小化算法都是可行的。我可能会使用 Reverse Cuthill-McKee(MATLAB 实现https://www.mathworks.com/help/matlab/ref/symrcm.html),但这主要是由于它的可用性。