C++ C+中的特征向量计算+;

C++ C+中的特征向量计算+;,c++,eigenvector,C++,Eigenvector,为了计算矩阵M的第一个“Q”特征向量,我如何在cpp中生成函数 我尝试使用此代码,但失败了 #include <RcppArmadillo.h> using namespace arma; mat M; int Q; vec getEigen(M,Q) { return eig_sym(M, Q); } #包括 使用arma; matm; int-Q; vec-getEigen(M,Q){ 返回eig_sym(M,Q); }

为了计算矩阵M的第一个“Q”特征向量,我如何在cpp中生成函数

我尝试使用此代码,但失败了

#include <RcppArmadillo.h>   

using namespace arma; 

 mat M;
 int Q;

 vec getEigen(M,Q) { 
 return eig_sym(M, Q);      
  }    
#包括
使用arma;
matm;
int-Q;
vec-getEigen(M,Q){
返回eig_sym(M,Q);
}    
错误消息显示:

调用“arma::col(arma::mat&,int&)”时没有匹配的函数

有什么想法吗?我是cpp的新手,不知道这个消息是什么意思


感谢

如评论中所述,犰狳中没有返回特征值子集的函数。但是,可以将
.head()
.tail()
eigen_sym()
组合以提取子集。此外,使用
reverse()
,因为犰狳以升序返回特征值。为了方便起见,我在这里使用:


这只适用于特征值,而不是特征向量。不过提取特征向量应该不难。

您提到了“失败”和“失败”“在这里,没有任何迹象表明你的意思。请为您的问题添加足够的细节,以便回答。谢谢您的建议!我添加了有关错误的信息。您检查了错误吗?现在还不清楚被称为
Q
的整数在这里起什么作用,但这似乎与文档中的任何语法都不匹配。此外,您的函数定义不正确。去掉globals并定义为类似于
vec-getEigen(const-mat&M,int-Q){…}
。你说的“第一”是什么意思?按哪个顺序?第一个Q特征向量是与第一个Q特征值相关联的向量,它们按最大特征值1的降序排列。
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>   

// [[Rcpp::export]]
arma::vec getEigen(const arma::mat& M, int Q) { 
  return arma::reverse(arma::eig_sym(M).tail(Q));      
}

/*** R
set.seed(42)
N <- 10
m <- matrix(rnorm(N * N), N, N)
m <- m + t(m)
getEigen(m, N/2)
 */
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>   

// [[Rcpp::export]]
arma::vec getEigen(const arma::mat& M, int Q) { 
  return arma::reverse(arma::eig_sym(M).tail(Q));      
}

/*** R
set.seed(42)
N <- 10
m <- matrix(rnorm(N * N), N, N)
m <- m + t(m)
getEigen(m, N/2)
 */