Rcpp eig_sym 和 R 的本征不提供相同的结果

Rcpp eig_sym and R's eigen don't deliver the same result

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

此致!

你的矩阵不对称,所以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);
}