我需要使用C ++ Eigen库中不完整的Cholesky因式分解。 我遵循了documentation of Eigen。具体来说,我有一个矩阵A,我想在不完整的下三角Cholesky因子L中获得零填充。用Eigen在C ++中执行此操作似乎很棘手。基于对文档的理解,我应该如下使用它。但是,我得到的结果总是 与Matlab命令ichol()返回的内容不同。
Eigen::SparseMatrix<double> A = cov_matrix.sparseView();
Eigen::IncompleteCholesky<double, Eigen::Lower, Eigen::NaturalOrdering<int>> ichol(A);
std::cout << ichol.info() << std::endl;
Eigen::SparseMatrix<double> L = ichol.matrixL();
Eigen::VectorXd S = ichol.scalingS();
Eigen::MatrixXd D = S.asDiagonal();
Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> P = ichol.permutationP();
sparse_L_chol = D.inverse() * L;