稀疏矩阵的不完全LU分解

计算科学 线性代数 稀疏矩阵 矩阵分解
2021-12-26 22:54:23

我有一个以 CSR 格式存储的稀疏矩阵。对于这个矩阵,我想得到不完整的 LU 分解。我试图找到可以利用 CSR 格式的算法,但我找不到任何东西。所有工作、论文、软件似乎都通过提供行索引和列索引来访问矩阵,就像 COO 格式 ( A[i,j]) 一样。

是的,这可以做到,但我认为这样做会花费大量时间来查找 CSR 格式的正确矩阵条目,因为必须遍历完整的行才能找到正确的列。我还没有找到任何想法或论文或 git 存储库?

如果没有其他可能性,那么访问 CSR 矩阵中元素的最快方法是什么?只需遍历给定的行,直到到达定义的列?

1个回答

在实现方面,您绝对应该看看英特尔 MKL 的。说,dcsrilu0并且dcsrilut(带阈值)接受DSS 格式的矩阵(我链接到非对称格式),它是三阵列 CSR 存储之上的包装器(两个页面都将包含与示例相同的矩阵)。

因此,在实现方面,您应该能够从 CSR 获得 ILU,而无需重新排序。

SuperLU当然也值得一看但是,它本身可以与 CCS 一起使用。文档摘录:

SuperLU 中的分解和求解例程旨在仅处理按列存储。如果输入矩阵在面向行的存储中,即在格式中,则驱动程序 (执行 LU 分解,这是按列的,并使用因素。在输出上保存的数据结构与从按列输入获得的数据结构不同(交换)。ASLU_NRdgssv()dgssvx()ATLTUTLU

...

或者,在调用 SuperLU 之前,用户可以调用实用程序dCompRow_to_CompCol()将输入矩阵SLU_NR格式转换为另一个格式矩阵。SLU_NC

虽然摘录谈到了完整的分解和求解,但与不完整的“预处理器”相关的对应物也应该如此。