对于AX = B,使用LDLt本征求解器,而A和B是稀疏矩阵,但是解决方案X具有密集模式

问题描述

我想知道是否有一种方法可以解决Ax = B,而两个矩阵A和B是对称且稀疏的,但是X会有密集的模式。最后,我正在寻找X的踪迹。

如果我将所有三个矩阵都定义为稀疏矩阵,则LdLt中的函数solve将非常长。我猜想它不知道X中的非零数目,所以需要时间。即使在Matlab中,X = A \ B也是如此。

我作为变通办法所做的是将B转换为一个密集矩阵,并对其调用该求解器以使其具有密集解X。它的速度快了三倍,但是对于大型矩阵来说,效率就不会那么高。

我想知道您是否有建议只计算X的对角线元素,因为我对跟踪感兴趣。或者,也许您知道我可以在求解器中设置精度公差的方法,因此在稀疏模式下无需计算接近零的值。我知道在迭代求解器中有setPercision,但我没有在直接求解器中找到它。

Eigen::SparseMatrix< double > A(n,n),B(n,n); // A and B are sparse:

Eigen::SimplicialLDLT< Eigen::SparseMatrix< double > > lSolver;
lSolver.compute( A);

Eigen::MatrixXd b = B; // convert B to a dense matrix and call the solver for dense X:
 
Eigen::MatrixXd X(n,n);

X = lSolver.solve( lb ); 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...