如何使用RcppEigen得到矩阵的行列式

时间:2015-02-02 06:26:04

标签: c++ r matrix rcpp

我是Rcpp的新手。我试图使用R包RcppEigen来获得矩阵的行列式。以下代码保存在文件中,我使用sourceCpp来使用它。使用sourceCpp时没有编译错误。在R中使用getDeterminant(A)时,A是一个矩阵。它总是抱怨以下错误。

"Error: could not find function "getDeterminant""

但是,getEigenValues效果很好。

如果有人乐意帮助我,我会非常感激。 非常感谢!

#include <RcppEigen.h>

// [[Rcpp::depends(RcppEigen)]]

 using Eigen::Map;                 // 'maps' rather than copies 
 using Eigen::MatrixXd;                  // variable size matrix, double  precision
 using Eigen::VectorXd;                  // variable size vector, double precision
 using Eigen::SelfAdjointEigenSolver;    // one of the eigenvalue solvers
 using Eigen::MatrixXi;
 using Eigen::MatrixBase;
 // [[Rcpp::export]]
 VectorXd getEigenValues(Map<MatrixXd> M) {
     SelfAdjointEigenSolver<MatrixXd> es(M);
     return es.eigenvalues();
 }

// [[Rcpp:export]]
double getDeterminant(Map<MatrixXd> AA){
     return  AA.determinant();
}

1 个答案:

答案 0 :(得分:4)

您在第二个Rcpp Attributes标记中缺少:Rcpp::export是正则表达式查找的格式。

如果添加,则可以访问这些功能:

R> Rcpp::sourceCpp("/tmp/crystal.cpp")
R> M <- matrix(1:9,3,3)*1.0
R> getEigenValues(M)
[1] 2.80689e-16 6.99265e-01 1.43007e+01
R> getDeterminant(M)
[1] 0
R>