calculating double integrals in R quickly

Joris Meys picture Joris Meys · Jan 18, 2012 · Viewed 16.8k times · Source

I'm looking for a solution for a double integral that is faster than

integrate(function(y) { 
   sapply(y, function(y) {
     integrate(function(x) myfun(x,y), llim, ulim)$value
   })
 }, llim, ulim)

with eg

myfun <- function(x,y) cos(x+y)
llim <- -0.5
ulim <- 0.5

I found an old paper that referred to a FORTRAN program called quad2d, but I couldn't find anything else but some help pages for matlab for the rest. So I'm looking for a C or FORTRAN library that can do double integrals quick (i.e. without the sapply loop), and that can be called from R. All ideas are very much appreciated, as long as they're all GPL compatible.

If the solution involves calling other functions from the libraries that are already shipped with R, I'd love to hear from them as well.

Answer

Jeffrey Sax picture Jeffrey Sax · Jan 18, 2012

The cubature package does 2D (and N-D) integration using an adaptive algorithm. It should outperform simpler approaches for most integrands.