有没有办法在Rcpp或RcppArmadillo中将矩阵提升到0.5的幂?我不想要元素方面的力量,因为我知道可以通过使用pow函数来完成。
答案 0 :(得分:1)
如果您询问函数expm()
,我会使用我的({不完整的)expm中的同名CRAN包RcppKalman package on GitHub中的代码来使用它:
#include <RcppArmadillo.h>
/* Interface to expm package. */
typedef enum { Ward_2, Ward_1, Ward_buggy_octave } precond_type;
/* Matrix exponential exp(x), where x is an (n x n) matrix. Result z
* is an (n x n) matrix. Mostly lifted from the core of function
* expm() of package Matrix, which is itself based on the function of
* the same name in Octave. */
void (*expmat)(double *x, int n, double *z, precond_type precond_kind);
extern "C" void R_init_RcppKalman(DllInfo *dll) {
expmat = (void (*) (double*, int,
double*, precond_type)) R_GetCCallable("expm", "expm");
}
//' This function computes the exponential of a matrix.
//'
//' This functions calls the \code{expm} function from the eponymous package
//' \pkg{expm}. This is implemented via a registered function call, and does
//' not required explicit linking at the C level. However, the \pkg{expm} package
//' is imported in order to access its registered function at the C level.
//' [...]
// [[Rcpp::export]]
arma::mat expm(arma::mat x) {
arma::mat z(x.n_rows, x.n_cols);
(*expmat)(x.begin(), x.n_rows, z.begin(), Ward_2);
return z;
}
文件中一些奇怪的东西只是从该包中获取expm
的机制。 arma::mat expm(arma::mat x)
函数非常规则(我想我也应该将其设为const &
)。
编辑:重新阅读你的问题,我想我误会了。你没有要求矩阵指数。但那么......如果它不是元素的话,你究竟要求的是什么?