モンテカルロ法で円周率を計算する。(python)



スポンサードリンク

モンテカルロ法の勉強の一貫として、円周率を導出するプログラムを書いたので載せます。

今回はこちらの本を用いて勉強しました。数値計算の基本的な手法について網羅されております。

 

 

モンテカルロ法とは?

乱数を用いてサンプル分布の情報を得る手法の総称です。乱数を用いていれば、その乱数の分布がなんであろうが、全てモンテカルロ法になるわけです。

かなり広義な意味です。さらにその乱数の確率分布に正規分布とかベルヌーイ分布、コーシー分布、指数分布とかがあるわけです。

円周率の計算

使用したコードです。

 

擬似乱数を用いていますので、プログラムを動かすたびに違う結果になります。

ちなみに500回円周率を計算した時の平均値は3.141804799999997になりました。グラフから見てもあってそうです。

さすがにデータ点10000点×500回なので、ほぼ真の値に収束しています。

計算回数を増やせば増やすほど、値が収束する現象は「大数の法則」として知られています。

 


 

各回数での円周率の計算値がどれくらい真の値からずれているのか、ずれに頻度はどれくらいかを視覚化するためヒストグラムを作成しました。

横軸が(円周率-計算で求めた円周率)、縦軸が各範囲における頻度です。今回はビン数を40(x軸の範囲内で何等分するか)にしました。

 



スポンサードリンク

乱数プロットの画像描画

モンテカルロ法のwiki風な画像を作成しました。試しにデータ点が10000と1000の時で計算しました。左側がデータ点10000、右側がデータ点1000の時です。半径1の円内にあるものが赤、それ以外が青です。

 

  

 

 

 

 

 

 

上の図を作成するために使用したコードを載せます。

 

本当はwikiみたいにデータ点数を変えた時のプロット描画を見たかったので、for文を回して各データ点数ごとにグラフを作成し、それを動画にするプログラムも書きたかったのですが、疲れたので今回はここまでにします。

wiki風動画作成は別途記事にしようと思います。

記事が役に立ったらシェア!

投稿者:

中村 俊

中村 俊

1993/09/04生まれ。機械系大学院を休学し、ベンチャーでインターンしている最中。直近では、デカルトの「方法序説」に感銘を受けた。 趣味:読書、web開発の勉強、異分野の論文読んだり、記事書いたり。 最終的には経営者か研究者になりたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA