4
オーバーフローエラーなしで大きな指数項を確実に追加する方法は?
マルコフ連鎖モンテカルロ法の非常に一般的な問題には、大きな指数項の合計である確率の計算、 ea1+ea2+...ea1+ea2+... e^{a_1} + e^{a_2} + ... のコンポーネントは非常に小さいものから非常に大きいものまであります。私のアプローチは、最大指数項た。aaaK:=maxi(ai)K:=maxi(ai)K := \max_{i}(a_{i}) a′=K+log(ea1−K+ea2−K+...)a′=K+log(ea1−K+ea2−K+...)a' =K + log\left( e^{a_1 - K} + e^{a_2 - K } + ... \right) ea′≡ea1+ea2+...ea′≡ea1+ea2+...e^{a'} \equiv e^{a_1} + e^{a_2} + ... このアプローチは、aのすべての要素aaaが大きい場合は妥当ですが、そうでない場合はそれほど良い考えではありません。もちろん、小さな要素は浮動小数点の合計に寄与しませんが、それらを確実に処理する方法はわかりません。Rコードでは、私のアプローチは次のようになります。 if ( max(abs(a)) > max(a) ) K <- min(a) else K <- max(a) ans <- log(sum(exp(a-K))) + …