0

我正在实现简单的 LDL^T CHOLMOD 来求解我的 C++ 项目中的线性方程组,该项目具有稀疏带矩阵(维度在 1,000 到 3,000 之间)。该矩阵有多个零对角线,因此 CHOLMOD 有时会为某些项目/矩阵提供错误的结果。

我使用 CHOLMOD(dbound) 来修改零对角线。它的工作原理是给出正确的结果,但前提是 dbound 很小,在我的情况下它应该小于 2.0E-8。问题是 CHOLMOD 变慢了。如果我使用大于 4.0E-3 的 dbound,CHOLMOD 将比我使用 2.0E-8 dbound 快 3-4 倍(但给出错误的结果)。

这是预期的吗?有没有办法既能得到正确的结果又能保持 CHOLMOD 的性能?我尝试了许多其他解决方案,例如手动修改零对角线或 dk[0](例如 t_cholmod_rowfac.c 中的第 414 行),但它们也会降低性能(但给出正确的结果)。非常感谢您提前阅读和帮助。

PS。为保密而未提供代码表示歉意。我只是想得到你的一般建议。但是,如果您需要示例代码来提供建议,我会尽力提供。

4

0 回答 0