Я написал код Rcpp для выполнения расчетов, связанных с временными рядами:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
double AmiA(arma::vec ts, int n, double cf, double h, double g) {
double sumA = log(cf);
double temp;
for (int i=1; i < n; i++) {
temp = cf;
for (int j=0; j<i; j++) {
temp += pow(ts[i]-ts[j]+h, g);
}
sumA += log(temp);
}
return(sumA);
}
Здесь «ts» - это вектор, а «n» - длина этого вектора.«cf», «h» и «g» являются константами.
Чтобы сделать код быстрее, я объявил двойное значение temp
, а затем для каждого наблюдения я добавил часть pow(ts[i]-ts[j]+h, g)
вместе с ним.Теперь для некоторого наблюдения;часть pow(ts[i]-ts[j]+h, g)
дает значения NaN.Это может быть получено:
n = 100; ts = sort(runif(n)); cf=1.4; h=0.5; g=2.3
AmiA(ts, n, cf, h, g)
# [1] 307.0836
Как я могу проверить эти значения без создания вектора и проверки значений этого вектора?Любые идеи будут высоко оценены.