C++中高效的大型稀疏块压缩线性方程

Efficient large sparse block compressed linear equation in C++

本文关键字:压缩 线性方程 大型 高效 C++      更新时间:2023-10-16

每个人。我对线性代数方程求解器没有什么经验。但现在,我需要求解大型稀疏块压缩线性方程。即CCD_ 1。

矩阵CCD_ 2由大小为CCD_。并且CCD_ 4的大小是CCD_。则矩阵A的实际大小为(nb*N,nb*N)

只存在几个子块。CCD_ 8为对角优势。

我试过艾根内置的slovers。即SimpliciaLLT和BiCGSTAB,第一个是慢的,而第二个不能收敛。

然后,我尝试了使用英特尔MKL的Eigen第三方解算器,即PardisoLLT、PardisoLDLT和PardisoLU。他们也很慢。

最后,我尝试了使用SuiteParse的Eigen第三方求解器,即CHOLMOD和SPQR。第一个是缓慢的,而第二个给出了相同的输入值,似乎不起作用。

我想也许是因为我用错了解算器,所以我没有利用"块压缩"功能,从而引发了很多无用的计算。

有人能给我一些建议吗?

只要矩阵大小不超过5000行/列,使用稀疏解算器就不会带来任何合理的好处;对于这样的矩阵,普通的密集求解器也很好,因为它不包含与存储和操作稀疏结构(如链表或邻接结构(相关的"开销"。另一方面,如果矩阵非常大(比如说,大约一百万行/列(,迭代求解器只能工作。我建议您访问以下网页,其中包含与您正在处理的问题非常相似的问题和解决方案的描述(包括具有块结构的稀疏矩阵的系统的解决方案以及图像处理(:http://members.ozemail.com.au/~comecau/CMA_LS_Parse.htm