С help("integrate")
:
f должен принять вектор входных данных и создать вектор оценки функции в этих точках. Функция Vectorize может быть полезна для преобразования f в эту форму.
Вы создали свою функцию для принятия единственного значения, double
, поэтому, когда integrate()
пытается передать ему вектор, она по праву жалуется. Итак, попробуйте
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::NumericVector myfunc(Rcpp::NumericVector x){
return exp(-0.5 * pow(x, 2) + 2 * x);
}
/*** R
integrate(myfunc, lower = 0, upper = 10)
*/
В результате
integrate(myfunc, lower = 0, upper = 10)
# 18.10025 with absolute error < 5.1e-08
Или, используя myfunc()
, скомпилированный из вашего кода C ++ сверху,
f <- Vectorize(myfunc)
integrate(f, lower = 0, upper = 10)
# 18.10025 with absolute error < 5.1e-08