在我的工作中,我需要计算逆矩阵(我的代码中为Mat Original),这里的B是单位矩阵。矩阵太大(56000 * 56000),无法直接使用$ solver.solve(B)$,相反,我需要一一计算逆矩阵的每一列。如果我不使用下面的代码进行赋值操作,则该过程会很快,耗时30秒。
Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>> solver;
solver.compute(Original);
for(int i = 0; i< B.cols();i++){
solver.solve(B.col(i));
}
但是如果我需要获取Solve()的返回值,则工作将变得非常耗时。
Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>> solver;
solver.compute(Original);
Vec x(Original.rows());
for(int i = 0; i< B.cols();i++){
x = solver.solve(B.col(i));
}
所以有人知道耗时的原因吗?还是有其他方法可以计算逆矩阵?