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