まずは,図4の様な円の面積を求めることにする.もちろん,この
円の面積は
と分かっているが,これを乱数を用いて数値計算しようと言うのである.
円を囲む正方形内部には,ランダムな点がある.正方形内部にある点の個数を
,円の
内部にある個数を
とする.そして,正方形の面積を
,円を
とする.する
と,これらには
![]() |
(16) |
円の面積を求めても大したことはないが,例えば図5のよ
うな複雑な形状の面積が計算できるとなるとぐっと御利益はある.先ほどの円の面積と同
じようにして,計算できるのである.計算したい部分内の点の数
は,
![]() |
![]() ![]() ![]() ![]() ![]() ![]() |
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
(18) |
このように複雑な領域の積分でも適用でき,応用範囲の広い方法である.積分の
精度を上げようとすると,サンプル数
を増やすことになる.しかし,その精度は,た
かだかサンプル数の平方根に比例するのみである.誤差を1/10にしたければ,サンプル数
を100倍にする必要がある.計算時間も100倍になる.これが,この方法の最大の弱点である.
精度がサンプル数の平方根に比例するのは,完全な乱数を仮定しているからである.それ を計算機で発生させることは不可能なので,その生成も問題となる.できるだけ良い乱数 を使わなくてはならないが,この問題は奥が深い.ここではこれ以上立ち入らないが,興 味のある者は調べてみると良い.
話は変わるが,ひとつ注意を与えておく.実際のプログラムでは,乱数を使って
を発生させて,それが内部にあるか否かをその場で判断する.配列に座標データを入れて,
最後に検査するとメモリーがいくらあっても足りなくなるからである.
|
|
積分を計算するために,まずは体積である.先ほどは,二次元問題であるが,はかなり複
雑な形状の面積をモンテカルロ積分で計算する方法を示した.2次元と同じ考えで,3次元,
4次元,
,M次元の体積も比較的,容易に求めることができる.分かり切った体積
に,領域
を包み込み,その内部にランダムに配置されたサンプル点の数を数えれ
ば良いのである.体積の計算は簡単である.
残りは,体積内部の平均
である.これも簡単で,領域
内部
にあるサンプル点の平均より求めることができる.即ち,
![]() ![]() |
(20) |
以上より,モンテカルロ法を用いると,体積
と平均値
の近似値が
計算できることが分かる.従って,式(20)の近似値を求めることが
できる.
数値計算で有名な本「NUMERICAL RECIPES in C」 [#!NRC!#]には,図 6の様な形状の重心を求める問題が出ている.このように複雑な積 分が必要なときにモンテカルロ法は威力を発揮する.