2016-09-12 3 views
2

zu machen Ich frage mich, wie Rcpp könnte zur numerischen Integration durch den Aufruf von C++ in R durchgeführt werden. Mein derzeitiges Setup dauert sehr lange und ist sehr fehleranfällig.Wie verwende ich Rcpp, um numerische Integration in C++ innerhalb von R

Ich denke, ich brauche etwas besseres als Standard-R-Integrationspaket. Würde die numerische Integration in C++ innerhalb von R diese Probleme lösen?

funk <- function(x,b) { 10^b * exp(-x/10) } 

lambda <- function(y,k) { exp(-k*y) } 

funk1 <- function(y,x,xb,b,k) { 
funk(x-xb-y,b) *exp(- integrate(lambda, lower=0, upper = y, k=k)$value) } 

funk2 <-function(x,xb,b,k) { 
integrate(funk1, lower= 0, upper=x-xb, x=x,xb=xb, b=b,k=k)$value } 

funk2_vc <- Vectorize(funk2) 

Vielen Dank im Voraus für Hilfe!

Antwort

4

Sie hätten viel leichter mit RcppNumerical mit Rcpp (und ja, es würde es schneller machen).

Der Code ist ein Port von NumericalIntegration, der relevante Teile von Quantlib und einigen anderen C++ - Bibliotheken wie LibLBFGS kombiniert.

Hier ist a nice tutorial, um loszulegen.

Um die Integration einer Funktion zu berechnen, zunächst eine Funktion von die Func Klasse geerbt definieren:

class Func 
{ 
public: 
    virtual double operator()(const double& x) const = 0; 
    virtual void operator()(double* x, const int n) const 
    { 
     for(int i = 0; i < n; i++) 
      x[i] = this->operator()(x[i]); 
    } 
}; 

Das Tutorial und Paketdokumentation genug sein, um sollte Ihre Bedürfnisse anzupassen, aber wenn Sie mehr Hilfe benötigen überprüfen die Dokumentation für die C++ - Bibliothek NumericalIntegration.

+0

Gute Antwort (obwohl technisch, es ist nicht RcppNumerical _ anstelle von Rcpp, sondern _with_ wie letzteres mit der ehemaligen verwendet wird). Es gibt ein weiteres Quadraturpaket mit Rcpp, das ich jetzt von: fastGHQuad. Aber RcppNumerical sieht wie eine gute Wette aus. –

+0

@DirkEddelbuettel Danke. Guter Punkt. –

+1

@ Hack-R Vielen Dank! Ich bin jetzt auf das Tutorial süchtig. Hoffentlich wäre es bald möglich, 'Rcpp' für die numerische Integration in R zu verwenden. – VitalSigns

Verwandte Themen