始める無料で始める

円周率の計算

ここでは古典的な例として、$\pi$(円周率)を推定してみます。

一辺が \(2\) の正方形を考えます。原点 \((0, 0)\) を中心に持ち、4つの頂点は \((1, 1), (1, -1), (-1, 1), (-1, -1)\) です。この正方形の面積は \(2\times 2 = 4\) です。次に、原点を中心とし半径 \(1\) の円がこの正方形にぴったり内接しているとします。この円の面積は \(\pi \times \text{radius}^2 = \pi\) になります。

\(\pi\) を推定するには、この正方形内に一様に点をランダムサンプリングし、円の内側に入った点の割合($x^2 + y^2 <= 1$)を求めます。円の面積はこの割合の \(4\) 倍なので、これが \(\pi\) の推定値になります。

この演習を通して、シミュレーションで計算を行う方法の感覚がつかめます。

この演習はコースの一部です

Pythonで学ぶ統計シミュレーション

コースを見る

演習の手順

  • コンソールで np.pi を使って \(\pi\) の真の値を確認し、sims を 10000、circle_points を 0 に初期化します。
  • for ループ内で、np.random.uniform() を使って -1 から 1 の範囲で size=2 の点(x と y の座標)を生成します。
  • その点が単位円内にあるかを \(x^2 + y^2 <= 1\) で判定し、within_circle に代入して、結果に応じて circle_points を増やします。
  • 円内に入った点の割合の 4 倍として、\(\pi\) の推定値 pi_sim を出力します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Initialize sims and circle_points
sims, circle_points = ____, ____ 

for i in range(sims):
    # Generate the two coordinates of a point
    point = ____
    # if the point lies within the unit circle, increment counter
    within_circle = point[0]**2 + point[1]**2 <= 1
    if ____ == True:
        circle_points +=1
        
# Estimate pi as 4 times the avg number of points in the circle.
pi_sim = ____
print("Simulated value of pi = {}".format(pi_sim))
コードを編集して実行