calculating double integrals in R quickly

萝らか妹 提交于 2019-11-26 09:42:53

问题


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.


回答1:


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




回答2:


The pracma package that Joshua pointed out contains a version of quad2d.

quad2d(myfun, llim, ulim, llim, ulim)

This gives the same answer, within numerical tolerance, as your loop, using the example function.

By default, with your example function, quad2d is slower than the loop. If you drop n down, you can make it faster, but I guess it depends upon how smooth your function is, and how much accuracy you are willing to sacrifice for speed.



来源:https://stackoverflow.com/questions/8913603/calculating-double-integrals-in-r-quickly

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!