2015-02-02 9 views
5

'u kullanarak matrisin determinantını nasıl elde ederim Rcpp için yeni bir markayım. Bir matrisin determinantını elde etmek için R paketi RcppEigen'i kullanmaya çalışıyorum. Aşağıdaki kod bir dosyaya kaydedilir ve kullanmak için sourceCpp kullanıyorum. SourceCpp kullandığımda derleme hatası yok. R'de getDeterminant(A) kullanıldığında, A bir matristir. Her zaman aşağıdaki hatayı şikayet ediyor.RcppEigen

Ancak, getEigenValues iyi çalışır.

Bu konuda bana yardımcı olmaktan mutluluk duyanlar için çok teşekkür ederim. Çok teşekkürler!

#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(); 
} 

cevap

4

İkinci Rcpp bir : eksik etiketi Nitelikler: Rcpp::export düzenli ifade arar şeklidir. Eğer eklerseniz

, fonksiyonlar erişilebilir hale gelir: Anlıyorum

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> 
+0

! Çok teşekkür ederim! ! :) – Crystal