如何在R中使用Rcpp在c++中做数值积分

How to use Rcpp to do numerical integration in C++ within R

本文关键字:c++ 数值积分 Rcpp      更新时间:2023-10-16

我想知道Rcpp如何通过在r中调用c++来执行数值积分。我目前的设置需要很长时间,并且非常容易出错。

我想我需要比默认的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)

提前感谢您的帮助!

使用RcppNumericalRcpp会容易得多(是的,它会使它更快)。

该代码是NumericalIntegration的一个移植,它结合了Quantlib的相关部分和其他一些c++库,如LibLBFGS。

这是一个很好的入门教程。

要计算函数的积分,首先定义继承自的函数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的文档。