我正在寻找一种比
更快的双积分解决方案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已经附带的库中调用其他功能,我也很乐意听取他们的意见。
答案 0 :(得分:16)
cubature包使用自适应算法进行2D(和N-D)积分。它应该胜过大多数被积函数的简单方法。
答案 1 :(得分:7)
Joshua指出的pracma
包中包含quad2d
的版本。
quad2d(myfun, llim, ulim, llim, ulim)
使用示例函数,在数值公差范围内,您可以得到与循环相同的答案。
默认情况下,使用示例函数,quad2d
比循环慢。如果你放弃n
,你可以让它更快,但我想这取决于你的功能是多么平滑,以及你愿意为速度牺牲多少精确度。