如何使用RcppEigen获取矩阵的行列式

5

我刚接触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个回答

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> 

我明白了!非常感谢!:) - Crystal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接