gpt4 book ai didi

c++ - C++中的特征向量计算

转载 作者:行者123 更新时间:2023-11-28 04:30:55 26 4
gpt4 key购买 nike

如何在 cpp 中创建一个函数来计算矩阵 M 的前“Q”个特征向量?

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

#include <RcppArmadillo.h>   

using namespace arma;

mat M;
int Q;

vec getEigen(M,Q) {
return eig_sym(M, Q);
}

错误信息说:

"no matching function for call to "arma::col(arma::mat&, int&)"

有什么想法吗?我是 cpp 的新手,不知道消息的含义。

谢谢

最佳答案

如评论中所述,Armadillo 中没有返回特征值子集的函数。但是,可以将 .head().tail()eigen_sym() 结合起来提取一个子集。此外,使用 reverse() 是有意义的,因为 Armadillo 按升序返回特征值。为方便起见,我使用 RcppArmadilloRcpp attributes这里:

// [[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::sourceCpp 时的输出:

// [[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)
*/

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

关于c++ - C++中的特征向量计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com