【アルゴリズム】モンテカルロ法

モンテカルロ法(Monte Carlo method)とは...

 * 「乱数」を用いてシミュレーションを何度も繰り返すことにより、「近似解」を求める手法

■ 使用例

例1:円周率の計算

 => 正方形内に乱数を用いて多数の点を一様に打ち、円の中にある点の個数によって求め、
    正方形に内接する円の面積を近似的に求める
サンプル
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
<!--
// 乱数x,yを発生させ、正方形内に点P(x,y)を打てば、
// 「1/4円内の点の数」と「正方形内の点の数」との比は、
// 「1/4円の面積」と「正方形の面積」との比の「近似値」となる
function calcPi(){
   var n = document.sampleForm.targetValue.value;
   var counter = 0;

   // n回シミュレーションを行う
   for (i = 0; i <= n; i++) {
      // x, yに0~1の乱数
      var x = Math.random();
      var y = Math.random();

      // ランダムに発生させた点が円内にあるか確認
      if ((x * x) + (y * y) <= 1) {
         // ランダムに発生させた点が円内にあった時の数を数え
         counter++;
      }
   }
   // (counter / n)は半径1の1/4円の面積のため、円周率はその4倍にする
   var pi = (counter / n) * 4;
   document.getElementById('result').innerHTML = '<p>' + pi + '</p>'
}
//-->
</script>
</head>
<body>
<form name="sampleForm">
試行回数(ランダムに打つ点の個数)を入力して下さい<br />
<input size="10" type="text" name="targetValue">
<input type="button" onClick="return calcPi();" value="Calc">
</form>
<p id="result">Result</p>
</body>
</html>