使用置换矩阵对稀疏矩阵进行 Cholesky 分解
Cholesky decomposition of sparse matrices using permutation matrices
我对大型稀疏矩阵的 Cholesky 分解很感兴趣。我遇到的问题是 Cholesky 因子不一定是稀疏的(就像两个稀疏矩阵的乘积不一定是稀疏的一样)。
例如,对于仅沿第一行、第一列和对角线具有非零值的矩阵,Cholesky 因子具有 100% 填充(下三角形和上三角形是 100% 密集的)。在下面的image中,灰色不为零,白色为零。
我知道的一个解决方案是找到一个排列 P 矩阵并对 PT[=46= 进行 Cholesky 分解]AP。例如,通过应用将第一行移动到最后一行并将第一列移动到最后一列的相同矩阵,Cholesky 因子是稀疏的。
我的问题是一般如何确定P?
了解 A 和 PTAP[=45 的 Cholesky 分解的区别=] 来自更真实的矩阵,请参见下图。我从 http://www.seas.ucla.edu/~vandenbe/103/lectures/chol.pdf
拍摄了所有这些图片
many heuristic methods (that we don’t cover) exist for selecting good
permutation matrices P.
我想知道其中的一些方法是什么(C、C++ 代码,甚至 Java 将是理想的)。
为最小填充矩阵分解找到矩阵的行和列的最佳排列的问题不是一个微不足道的任务(正如评论中指出的那样)。因此,在实践中使用了启发式算法。
有一些实现启发式 renumbering/ordering-strategies 的库,通常基于矩阵的邻接图的图算法。一种尝试减少相应邻接矩阵的带宽。一个易于实施的算法是 Cuthill-McKee Algorithm or the Minimum-Degree Ordering algorithm. More about this problem can be found in the Book Yousef Saad: Iterative Methods for Sparse Linear Systems (2003),在许多其他算法之上。
许多库都实现了启发式算法,例如
- Suitesparse 用于大型稀疏线性系统的直接求解器的库集合。在 AMD、CAMD、COLAMD 和 CCOLAMD 库中实现的排序方法
- (Par-)Metis 用于图分区的库,但也提供矩阵重排序算法
-
Boost.Graph 直接处理邻接图并提供一些排序算法,如提到的 Cuthill-McKee 和最小度排序
- (PT-)Scotch 用于图分区和稀疏矩阵重新排序
其中一些库还提供稀疏 Cholesky 分解方法,可以直接使用。
我对大型稀疏矩阵的 Cholesky 分解很感兴趣。我遇到的问题是 Cholesky 因子不一定是稀疏的(就像两个稀疏矩阵的乘积不一定是稀疏的一样)。
例如,对于仅沿第一行、第一列和对角线具有非零值的矩阵,Cholesky 因子具有 100% 填充(下三角形和上三角形是 100% 密集的)。在下面的image中,灰色不为零,白色为零。
我知道的一个解决方案是找到一个排列 P 矩阵并对 PT[=46= 进行 Cholesky 分解]AP。例如,通过应用将第一行移动到最后一行并将第一列移动到最后一列的相同矩阵,Cholesky 因子是稀疏的。
我的问题是一般如何确定P?
了解 A 和 PTAP[=45 的 Cholesky 分解的区别=] 来自更真实的矩阵,请参见下图。我从 http://www.seas.ucla.edu/~vandenbe/103/lectures/chol.pdf
拍摄了所有这些图片many heuristic methods (that we don’t cover) exist for selecting good permutation matrices P.
我想知道其中的一些方法是什么(C、C++ 代码,甚至 Java 将是理想的)。
为最小填充矩阵分解找到矩阵的行和列的最佳排列的问题不是一个微不足道的任务(正如评论中指出的那样)。因此,在实践中使用了启发式算法。
有一些实现启发式 renumbering/ordering-strategies 的库,通常基于矩阵的邻接图的图算法。一种尝试减少相应邻接矩阵的带宽。一个易于实施的算法是 Cuthill-McKee Algorithm or the Minimum-Degree Ordering algorithm. More about this problem can be found in the Book Yousef Saad: Iterative Methods for Sparse Linear Systems (2003),在许多其他算法之上。
许多库都实现了启发式算法,例如
- Suitesparse 用于大型稀疏线性系统的直接求解器的库集合。在 AMD、CAMD、COLAMD 和 CCOLAMD 库中实现的排序方法
- (Par-)Metis 用于图分区的库,但也提供矩阵重排序算法
- Boost.Graph 直接处理邻接图并提供一些排序算法,如提到的 Cuthill-McKee 和最小度排序
- (PT-)Scotch 用于图分区和稀疏矩阵重新排序
其中一些库还提供稀疏 Cholesky 分解方法,可以直接使用。