Ошибка при вызове функции C ++ из R и ее интеграции

Я хочу, чтобы численно интегрировать одномерную функцию (которая была написана на C ++) с функцией R integrate, В качестве короткого примера, я закодировал функцию myfunc в C ++.

    #include <cmath>
#include <Rcpp.h>

using namespace std;

// [[Rcpp::export]]

double myfunc (double x){
double result;
result = exp( -0.5*pow(x,2) + 2*x );
return result;
}

После загрузки myfunc в R и интегрируя его, я получаю следующую ошибку:

    library(Rcpp)
sourceCpp("myfunc.cpp")
integrate(myfunc,lower=0,upper=10)

Ошибка в f (x, …): ожидается одно значение: [экстент = 21].

Кто-нибудь может объяснить, что означает эта ошибка и как я могу решить эту проблему?

1

Решение

От 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
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]