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