17

我正在寻找一个比双积分更快的解决方案

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

我找到了一篇旧论文,其中提到了一个名为 的 FORTRAN 程序quad2d,但是除了一些 matlab 的帮助页面之外,我找不到其他任何东西。所以我正在寻找一个可以快速进行双积分的 C 或 FORTRAN 库(即没有 sapply 循环),并且可以从 R 中调用。所有想法都非常感谢,只要它们都与 GPL 兼容。

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

4

2 回答 2

17

cubature包使用自适应算法进行 2D(和 ND)集成对于大多数被积函数,它应该优于更简单的方法。

于 2012-01-18T18:26:35.553 回答
8

pracmaJoshua 指出的软件包包含一个quad2d.

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

这给出了与您的循环相同的答案,在数值公差范围内,使用示例函数。

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

于 2012-01-18T18:15:01.677 回答