モンテカルロ法とは、繰り返し試行を行うことで、確率の大数の法則を用いて、数値測定する方法です。名前は、カジノで有名なモナコの都市名に由来しています。フォンノイマンが考案したと言われています。コマ大数学科でも取り上げられたことがあります。
例として、モンテカルロ法を用いて、円周率を測定してみましょう。下図の縞模様の領域が円(の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 楽天ウェブサービス