Python

モンテカルロ法を用いて円周率をPythonで近似計算する

どうも(^^)/

あまり使う機会がないですがPythonを用いて、円周率を計算したいと思います。

 

本日の内容
モンテカルロ法を用いて円周率をPythonで計算してみる

 

お遊びですので、Pythonコードもちょちょいって感じで作ってみました。

 

内容はこちらの本に書いてあったので紹介したいと思います。

スポンサーリンク

モンテカルロ法とは

 

モンテカルロ法 とはシミュレーションや数値計算を乱数を用いて行う手法の総称のことです。

(例が思いついたら追記します)

 

モンテカルロ法を用いて円周率を近似してみよう

 

数値計算での考え方は、まず一辺が長さ\(a\)の正方形を用意します。

そこに、

  • 0~1の値をランダムにm個の点を打っていきます。

そうすると、数密度が

\begin{align*}
\rho_{a}=\frac{m}{a^{2}}\tag{1}
\end{align*}

となります。

 

次に、

  • 半径\(a\)の1/4円を用意して、先ほどの点の内、1/4円に入った数をカウントします。

1/4円に入った数が\(n\)個なら、数密度は

\begin{align*}
\rho_{c}=\frac{n}{\pi a^{2}/4}\tag{2}
\end{align*}

となります。

 

乱数を用いているので、点を一様に配置してくれるとすると数密度は両者で同じです。

\begin{align*}
\rho_{a}=\rho_{c}\tag{3}
\end{align*}

 

なので、(1)(2)式より、

\begin{align*}
\pi=4\frac{n}{m}\tag{4}
\end{align*}

 

と、円周率が近似的に求まることがわかりました。

 

以上の流れをまとめると・・・

 

乱数で点を打ちつけていく数が多ければ多いほど、円周率に近づきそうです。

円周率をPythonを用いて近似してみる

 

では、先ほど説明した内容でアルゴリズムを書いていきましょう。

乱数の数は最大で\(m=1000\)にしておきます。

 

 

結果

  • 横軸:乱数(点を打った数)
  • 縦軸:円周率の近似式\(4\frac{n}{m}\)

オレンジの実線が真の円周率の値です。

 

最大で乱数の数を1000個にまで計算させました。

乱数の数が多いと、真の円周率の値に近づいていっているのがわかります。

 

 

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。