C++ C+中的特征向量计算+;
为了计算矩阵M的第一个“Q”特征向量,我如何在cpp中生成函数 我尝试使用此代码,但失败了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); }
#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)
*/