モンテカルロ法とは、繰り返し試行を行うことで、確率の大数の法則を用いて、数値測定する方法です。名前は、カジノで有名なモナコの都市名に由来しています。フォンノイマンが考案したと言われています。コマ大数学科でも取り上げられたことがあります。
例として、モンテカルロ法を用いて、円周率を測定してみましょう。下図の縞模様の領域が円(の1/4) 内部で、黒い部分は円の外側です。
ランダムに座標を選んだとき、「円の内部にある確率=(円の内側の面積/全体の面積)=¼π」となるはずです。試しにスクリプトを作成してみました。
スクリプトでは、x座標y座標ともに、0から1000の乱数とし、x²+y² が1000²=1000000を越えるかどうかを判定します。(厳密には 0.5 1.5 … 999.5 のほうが望ましいですが、ここでは簡略化しています。) 試行回数を増やすと、約0.785になるはずです。
<?php class player {/*{{{*/ var $test = 0; var $x = 0; var $y = 0; var $distance = 0; var $true = 0; function player($num) { /*{{{*/ $this->test += $num; for ($j=0;$jshuffle(); } /*}}}*/ } /*}}}*/ function shuffle() { /*{{{*/ $this->x = mt_rand(0,1000); $this->y = mt_rand(0,1000); $this->distance = $this->x * $this->x + $this->y * $this->y ; echo "x="; echo $this->x; echo ", y="; echo $this->y; echo ", distance="; echo $this->distance; if ( 1000*1000 > $this->distance ) { $this->true++; echo ", True"; } echo "<br>n"; } /*}}}*/ function output() { echo $this->true; echo "/"; echo $this->test; } }/*}}}*/ ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php if (2 <= $_POST['test'] && 100000 >= $_POST['test'] ) { $obj = new player($_POST['test']); print "<hr>"; $obj->output(); } ?> <form action="pi.php" method="post"> テスト回数:(2-100000) <input type="text" size=5 name="test" value=""> <input type="submit" name="submit" value="submit"> </form> </body> </html>
楽天で検索
【楽天ブックスならいつでも送料無料】モンテカルロ法によるリアル・オプション分析 [ 大野薫 ]
7776円
事業計画の戦略的評価 大野薫 金融財政事情研究会 きんざい発行年月:2013年01月 ページ数:453p サイズ:単行本 ISBN:9784322121803
楽天ブックス
Supported by 楽天ウェブサービス