【Python】Pythonでモンテカルロ法を使って円周率を計算してみた!

python

この記事は、Pythonで円周率の計算方法のサンプルコードとそのコードの解説をしていきます。

今回の記事はpipインストールは必要ないですなので仮想環境入りませんよ!

サンプルコード

早速サンプルコードを見せますね。

import random                   #ランダムを作成するモジュール
trypi = 1000                    #for文を何回回すか
country = 0                     #ループ記憶用
countpi = 0                     #1/4に入った回数の記憶用
result = 0                      #結果の保存用
for count in range(trypi):      #繰り返し制御 trypiの数を超えたら繰り返しをやめる
    x = random.random()         #x軸のランダム
    y = random.random()         #y軸のランダム
    if x*x+y*y<=1:              #1/4に入ったかどうか 入ったら次を実行入らなかったらパス
        countpi += 1            #1/4に入ったので1加算
    country += 1                #ループに1加算
result = 4*countpi/trypi        #円周率を求める式
print(result)                   #結果出力

このような感じです。

解説は右側を参考してください。

追加の解説は、

import random が今回使用するモジュールです。

trypi で何回目計算するか、

ですね!他に分からないことがあればコメント欄でお問い合わせ下さい。

モンテカルロ法は繰り返せば繰り返すほど精度がよくなっていきます。

なので1000以上で繰り返すことをお勧めします。

物足りない方へ

物足りない方はこのコードに改良を加えていきましょう!

見やすいように画像を生成する

見やすいようにどこに散布されたかの画像を生成してみましょう!

サンプルコードはこちらから

import matplotlib.pyplot as plt         #画像を生成する文字ジュール
import random                           #ランダムを作成するモジュール
trypi = 1000                            #for文を何回回すか
country = 0                             #ループ記憶用
countpi = 0                             #1/4に入った回数の記憶用
result = 0                              #結果の保存用
for count in range(trypi):              #繰り返し制御 trypiの数を超えたら繰り返しをやめる
    x = random.random()                 #x軸のランダム
    y = random.random()                 #y軸のランダム
    if x*x+y*y<=1:                      #1/4に入ったかどうか 入ったら次を実行
        countpi += 1                    #1/4に入ったので1加算
        plt.scatter(x,y,color='red')    #赤色で印wつける
    else:                               #1/4に入らなかった場合
        plt.scatter(x,y,color='blue')   #青色で印をつける
    country += 1                        #ループに1加算
result = 4*countpi/trypi                #円周率を求める式
print(result)                           #結果出力
plt.show()                              #印の画像を生成

先ほどのコードから変わった点は見やすいように画像が生成されるようになりました。

生成された画像を見てみましょう!

このようになります!

処理速度が遅くなるので、面白いに全振りしたコードです(笑)

最後に

お疲れ様でした!

今回はPythonでモンテカルロ法を使って円周率を計算してみました!

皆さんもPython沼にはまっていきましょう!

コメント