LogoMark.png

Python/Introduction のバックアップ差分(No.1)


#author("2023-08-17T10:26:50+09:00","default:inoue.ko","inoue.ko")
*MonteCarloMethod
Python プログラムサンプル
~
~

**MonteCarloMethod

***モンテカルロ法で π の値を求める
円周率(π)を近似的に求めるプログラムを通して、Google Colaboratoryの使い方とPythonプログラムの書き方を体験してみましょう。
~

***ノートブックの新規作成
-ブラウザ上の Google Colaboratory で ''ファイル> ノートブックを新規作成''
-Untitled0.ipynb というファイル名を変更 > MonteCarloMethod.ipynb
~

***サンプルコード
-テキストセルを追加して、ノートの冒頭にタイトルをつけましょう。
 # モンテカルロ法による円周率の導出

-コードセルに以下のコードを書いて、実行してみましょう。
 # ライブラリの読み込み
 import math
 import random 
 
 # 初期化
 n = 1000
 cnt_in = 0
 cnt_out = 0
 
 # シミュレーション
 for i in range(n):
   # 0.0 - 1.0 のランダムな「雨粒」
   x = random.random()
   y = random.random()
   # 4分円の中に落ちた数をカウント
   r = math.sqrt(x**2 + y**2)
   if r <= 1.0:
       cnt_in += 1
   else:
       cnt_out += 1
 
 # 円周率の近似値
 Pi = cnt_in / n * 4 
 
 # 結果の表示
 print("Num:", n)
 print("IN:", cnt_in)
 print("OUT:", cnt_out)
 print("Pi:", Pi)
 
-n の初期値を大きくしていくと、結果が 3.14 に近づくことを確認しましょう。計算資源に負担をかけることがないよう、n の値はほどほどに・・

-プログラムの解説をテキストセルにマークダウン記法で記載して、ノートを完成させましょう。

~

***手法の解説
#image(https://upload.wikimedia.org/wikipedia/commons/c/cd/Montecarlo_pi2.PNG)
&scale(75){[[Wikimediacommons File:Montecarlo pi2.PNG>https://commons.wikimedia.org/wiki/File:Montecarlo_pi2.PNG]]};

-一辺の長さを r とする正方形の面積を S とし、その正方形の左下頂点を中心とする 半径rの4分円の面積を Q とすると
 Q =  π*r*r / 4 
 S =  r*r  
 よって、Q / S = ( π*r*r / 4 ) / ( r*r ) = π/4

-すなわち、以下の関係式が得られます。
 π = Q / S * 4 

-正方形の「枠内」に一様な乱数を使って「雨を降らせる」と
 正方形全体に降る雨粒の数:4分円の中に降る雨粒の数 ≒ S:Q
となり、雨粒の数が多くなれば、S:Q の比率に一致します。

-これを利用することで
 π = 4分円の中に降る雨粒の数 / 正方形全体に降る雨粒の数 * 4
というかたちで、π の近似値を求めることができます。
~
~
~