Rcpp eig_sym和R的本征不会产生相同的结果

问题描述 投票:1回答:1

我目前遇到有关用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命令中,虚部也完全丢失,这不会打扰我,因为我只对Real部分感兴趣。希望有人能赐教!

最好的祝福!

r rcpp eigenvalue
1个回答
4
投票

你的矩阵不对称,所以eig_sym不正确。您可以将以下C ++代码与eig_gen一起使用。

#include <RcppArmadillo.h>

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

// [[Rcpp::export]]
arma::cx_vec getEigenValues(arma::mat M) {
  return arma::eig_gen(M);
}
© www.soinside.com 2019 - 2024. All rights reserved.