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のヘルプページしか見つかりませんでした。そこで、二重積分をすばやく (つまり、sapply ループなしで) 実行でき、R から呼び出すことができる C または FORTRAN ライブラリを探しています。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 に答える