2011年3月5日土曜日

モンテカルロ法を用いた数値積分

そろそろ卒業も近いので、これまで講義とかで提出したレポートをまとめてみる。
とりあえずはこのレポートから。


「コンピュータで積分ってどうやるの?」という疑問に対する解答の一つ。
モンテカルロ法を用いる手法について。

モンテカルロ法とは「ランダムな値を使ってシミュレーションや数値計算を行う手法の総称」らしいです。

たとえばシミュレーションの分野でこれを使うということは
『ランダムな数字を使ってシミュレーションを行います。一回だけではだめかもしれませんが、死ぬほど繰り返せば統計的にみてだいたい合ってる答えがわかるのでは無いでしょうか?』
とこういう事になります。

たとえば数値計算では『線は点の集合体なんだから、線の上にランダムな点を死ぬほど打って、その点の数を数えれば線の長さがわかるんじゃね?』みたいな感じになります。

そんなモンテカルロ法を用いて数値計算を行う代表的な例として、積分をする方法を紹介します。

理論:
1) 四角形の中に適当な図形があります
2) 四角形の中に適当に点をうち、その点が図形の中か外かを判定、外のやつは消します
3) これを死ぬほど繰り返して図形の内側が真っ黒になったとき、図形内部の点の数を数えれば図形の面積がわかります。

しかし、実際に死ぬほど繰り返すわけにはいかないので統計的な考え方を使います。
つまりこうなります。
3') てきとうに打った点が図形内に入る確率は四角形内の図形の面積と同じはずです。ならば数万個の点を打ち、そのうちの何個が図形内にあるかを数えれば、その値(点の数/点を打った総数)は図形の面積とほぼ同じといえるのではないでしょうか?


というわけで、この論理を使って
y = integral_{1}^{2} cos(loge(x))
を計算するプログラムはこんな感じになります。


ちなみにこのプログラム。
面積の計算部分を「半径1で中心角が90度の扇型」に変更し、計算された値に4をかけると「半径1の円の面積=円周率」が計算できます。

0 comments:

コメントを投稿