问题描述
我想知道是否有一种方法可以解决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 (将#修改为@)