快速计算R中的双积分

时间:2012-01-18 16:23:05

标签: c r fortran integral

我正在寻找一种比

更快的双积分解决方案
integrate(function(y) { 
   sapply(y, function(y) {
     integrate(function(x) myfun(x,y), llim, ulim)$value
   })
 }, llim, ulim)

用例如

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

我发现old paper引用了一个名为quad2d的FORTRAN程序,但除了matlab的其他一些帮助页面之外,我找不到任何其他内容。所以我正在寻找一个可以快速进行双积分的C或FORTRAN库(即没有sapply循环),并且可以从R调用。所有想法都非常受欢迎,只要它们都是GPL兼容的。

如果解决方案涉及从R已经附带的库中调用其他功能,我也很乐意听取他们的意见。

2 个答案:

答案 0 :(得分:16)

cubature包使用自适应算法进行2D(和N-D)积分。它应该胜过大多数被积函数的简单方法。

答案 1 :(得分:7)

Joshua指出的pracma包中包含quad2d的版本。

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

使用示例函数,在数值公差范围内,您可以得到与循环相同的答案。

默认情况下,使用示例函数,quad2d比循环慢。如果你放弃n,你可以让它更快,但我想这取决于你的功能是多么平滑,以及你愿意为速度牺牲多少精确度。