В настоящее время я сталкиваюсь с проблемами, касающимися вычисления собственных значений с помощью Rcpp. При использовании Rcpp eig_sym
я не получаю тот же результат, что и с R eigen
, хотя на веб-странице Armadillo указано, что он должен давать тот же результат (например, http://gallery.rcpp.org/articles/armadillo-eigenvalues/).
Я буду использовать следующую функцию Rcpp (такую же, как в режиме онлайн):
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec getEigenValues(arma::mat M) {
return arma::eig_sym(M);
}
и после использования следующих строк кодов:
library(Rcpp)
library(RcppArmadillo)
MM <- matrix(c(0.5055860,0.2093442,-0.1061261,
-0.3170091,0.5472850,-0.4170188,
0.29660273,-0.02383499,0.80188728),3,3)
sourceCpp("./getEigenValues.cpp")
getEigenValues(MM)
eigen(MM)$values
Я получаю:
> getEigenValues(MM)
[,1]
[1,] 0.1410249
[2,] 0.6472190
[3,] 1.0665144
> eigen(MM)$values
[1] 0.6986485+0.2855979i 0.6986485-0.2855979i
[3] 0.4574612+0.0000000i
Откуда берется это несоответствие? Мнимая часть также полностью отсутствует в команде Rcpp, что не мешало бы мне, так как меня интересует только Реальная часть. Я надеюсь, что кто-то может просветить меня!
С наилучшими пожеланиями!