2016-09-12 7 views
2

Rcpp은 R에서 C++을 호출하여 수치 적분을 수행하는 방법에 대해 궁금해했습니다. 현재 설치에는 시간이 오래 걸리고 오류가 발생하기 쉽습니다.Rcpp를 사용하여 C++에서 수치 적분을 수행하는 방법 R

기본 R 수치 통합 패키지보다 더 나은 것이 필요하다고 생각합니다. R 내의 수치 적 통합을 통해 C++에서 이러한 문제를 해결할 수 있을까요?

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) 

미리 도움을 청하십시오!

답변

4

RcppNumericalRcpp을 사용하면 훨씬 쉬울 것입니다. 그렇다면 속도가 빨라집니다.

코드는 NumericalIntegration 포트이며, 이는 Quantlib의 관련 부분과 LibLBFGS과 같은 몇 가지 다른 C++ 라이브러리를 결합합니다.

여기에 a nice tutorial이 있습니다.

먼저 에서 상속 함수를 정의, 기능의 통합을 계산하려면 Func 클래스 :

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]); 
    } 
}; 

튜토리얼 및 패키지 문서는 사용자의 요구에 맞게하기에 충분하지만, 당신이 필요로하는 경우 더 체크 아웃 도움이 될 것입니다 C++ 라이브러리 NumericalIntegration에 대한 설명서.

+0

좋은 답변 (비록 기술적으로는 RcppNumerical _instead of_Rcpp이 아니라 후자가 전자와 함께 사용됨). Rcpp를 사용하는 또 다른 쿼드 러처 패키지가 있습니다 : fastGHQuad. 그러나 RcppNumerical은 좋은 내기처럼 보입니다. –

+0

@DirkEddelbuettel 감사합니다. 좋은 지적. –

+1

@ Hack-R 고마워! 나는 지금 튜토리얼에 푹 빠져있다. R 내의 수치 적분을 위해 곧'Rcpp '를 사용할 수있게되기를 바랍니다. – VitalSigns