稀疏矩阵Cholesky分解Rcpp Eigen

时间:2015-03-11 18:21:41

标签: sparse-matrix rcpp

我在R中处理一个大的稀疏矩阵(10k x 10k方差/协方差矩阵,所以对称和正定)。我需要一种快速的方法来找到该矩阵的Cholesky分解。我知道使用RcppEigen包中的SparseLU可以解决方案,但我无法弄清楚它是如何工作的。

在下一个脚本中,我将函数的示例放在R中。它加载了一个SparseMatrix SS,我需要对其进行Cholesky分解。我希望得到与chol(SS)相同的输出,具有典型的R函数chol。

cholScript<-'using Eigen::Map; 
using Eigen::SparseMatrix;

const SparseMatrix<double> Sigma(as<SparseMatrix<double> >(Sigma));
using namespace Rcpp;

// compute C, the Cholesky decomposition of Sigma

return wrap(C);'

cxxfunction(signature(Sigma = "dgCMatrix"), cholScript, plugin = "RcppEigen")

非常感谢。

1 个答案:

答案 0 :(得分:1)

我认为这可以解决问题:

CholeskyCppSparse<-'using Eigen::Map; 
using Eigen::SparseMatrix;
using Eigen::LLT;
const SparseMatrix<double> SS(as<SparseMatrix<double> >(Sigma));

typedef Eigen::SimplicialLLT<SparseMatrix<double> > SpChol;

const SpChol Ch(SS);
return wrap(Ch.matrixL());'

CholSparse <- cxxfunction(signature(Sigma = "dgCMatrix"), CholeskyCppSparse, plugin = "RcppEigen")

如果想要分解的上三角形部分,则更改矩阵的矩阵L(与R中的chol()函数一样。)

相关问题