プログラミングとコナン

Pythonで学ぶ高校数学の美しい物語(モンテカルロ法)

私は昔塾で数学を教えていました。

いきなり余談ですが、私は小学生の時に、先生に、「1日で円周率を一番たくさん覚えてきた子にビー玉あげる」といわれたので、100桁一気に覚えた猛者です笑。

ちなみに今でも覚えています笑。

結果は当然1番で、輝かしいガラス玉をもらえました。今でも大切に残しています笑。

今回は、モンテカルロ法を用いて円周率を求め、制度評価のシミュレーションもしていきます!楽しんで読んでください!

関連記事をまとめておきます。

【Python入門】初めてのプログラミング(ラムダ式 : 無名関数, lambda) 年金の最適受給月はいつか?Pythonでシミュレーション 【Python入門】初めてのプログラミング(スコープと関数)

プログラミングスクールに関しては下の記事で詳しく記述しています。

こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。

【全スクール無料体験あり!】プログラミングを学びたい人におすすめのスクール5選!

モンテカルロ法とは

モンテカルロ法とは、乱数を用いて、シミュレーションや数値処理を行う手法です。

下の図を見てください。青い点は、乱数を用いて打った点だと考えてください。青い点を数えると、(左:右)=(10:10)=(1:1)になります。なので、面積比も1:1になります。

今回は、説明のため点の数は20個ですが、この点の数が10万以上あれば、より正確な値が得られ、誤差は0.1%以内になるといわれています

円周率の計算方法

今回は、円周率である、「π」の近似値を求めます。

  • 正方形の1辺の長さを2cmとすると、内接する円の半径は1cmとなる。
  • 青い点の総数をNとする。
  • 円の中にある青い点の数をnとする。

これらの条件と、面積比、円の面積を求める公式から、

2 × 2 : 1 × 1 × π = N : n

よって、

π = 4n / N

となります。簡単ですね!

モンテカルロ法シミュレーション

プログラムの作成

単純に円周率を求めるだけなら以下のコードでできます。
何をしているのかが理解できれば大丈夫です。

円の原点を(0, 0)としています。

ただ、これだけだとつまらないのでコードを書き換えて視覚的にみていきましょう!

ラムダについては次の記事を参考にしてください。

【Python入門】初めてのプログラミング(ラムダ式 : 無名関数, lambda)

10万回の視覚的試行

次は、どのように点が取られているのかを視覚的にわかるようにグラフ描写していきます。

1万個の点
10万個の点

上の画像は、青い点が、ランダムに打たれたものです。点が重なり合って、右側の画像は、もはや肉眼では背景のように見えます。これだけ多くの点を打てれば、感覚的にも、点の数の比がそのまま面積比と近似値をとることはわかりますね!

実際、出力例では、円周率π = 3.14472 となっており、求める結果に近いことが確認できました!すごいですね!

まとめ

最後までお読みいただきありがとうございます。

今回は、乱数を用いて数値処理を行う、「モンテカルロ法」をPythonを用いて実装してみました。乱数で円周率が求まる理屈がご理解いただけましたでしょうか?

モンテカルロ法で調べてみると、4分の1の円で考えている記事が多かったのですが、普通の円で考えることで理解しやすいと思い自分なりに書いてみました。

10万回という人間の手ではほぼ不可能なことでも、コンピュータの力を使えばこんなに簡単にシミュレーションができるすごさや面白さ、数学的な考え方をこれからも伝えていきたいと思います。

プログラミングスクールに関しては下の記事で詳しく記述しています。

こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。

【全スクール無料体験あり!】プログラミングを学びたい人におすすめのスクール5選!

コメントを残す

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

CAPTCHA