Let the world spice up your life.

Cafetalk Tutor's Column

Tutor Junya NORIMATSU 's Column

新しいクーポン と Pythonで円周率のお話

Jun 2, 2018

ご無沙汰しております。前回の投稿がゴールデンウィーク前だったのでしばらく空いてしまいました。
早くも6月になり私もcafetalkデビューして3ヶ月になりました。

というわけでご愛顧に感謝しましてクーポンを新しく作りました。
よろしければぜひご利用くださいね。

============================
クーポン名: cafetalk開講3ヶ月目突入クーポン!
コード: 48e71595
割引率: 30%
適用レッスン: あなたもきっと作れる!プログラミング入門〜初級 (Python)
対象受講期間: 2018年6月1日 ~ 2018年6月30日
クーポンのURL: http://cafetalk.com/coupons/detail/?id=734868&lang=ja
(GMT+09:00 Tokyo) 
============================

さて、クーポンの件はこれくらいにしまして、今回は円周率のお話です。

皆さん小学校で円周率って習いましたよね。
円周率…どんなときに使ったかというと、円の面積を求めるときですね。

面積=半径 x 半径 x 円周率

って覚えましたよね。

実はこの公式を応用すると、プログラミングで円周率を計算できちゃいます。
この公式、半径が1だったら

面積 = 円周率

ですよね。

円の面積を何らかの方法で求められれば、それがそのまま円周率になってしまうという算段です。

というわけで書いてみました。コードはこちら。

https://gist.github.com/jnory/7e9b04a0e1f19f51043b69c13fa0bba8

これを実行するとこんなグラフができます。


グラフの右の方に行くと線が3.14に近づいて行ってるのがわかりますね。

さっき上で、「何らかの方法で」と書きましたが、今回作ったのは「モンテカルロ法」と言われる有名な方法です。

モンテカルロ法なんて名前を先に出すと難しそう…と思われる方もいらっしゃるかもしれませんが、やっていることは単純です。

1. 半径1の円とそれに接する正方形を用意します
2. 正方形の中に適当に点を書きます(場所はランダムです)

これを実行するとこんな感じの図が描けますね。

点を沢山打てれば、おおよそ

円の内側に入った点の数 : 点の総数の割合 ≒ 円の面積 : 正方形の面積 

ですから、これを手がかりにおおよその円の面積が求められるわけです。

ここまで解説すると一番上のグラフの意味もおわかりいただけるかと思います。
横軸が点の数、縦軸が推定された円周率の値を意味していたんですね。
右に行けば行くほど3.14に近づいていっていたのは点の数が増えて精度が上がったわけです。

円周率を求められて何がうれしいのかと思った方もいらっしゃるかもしれません。でも、よく考えていただければわかるのですが、このテクニックで面積を求めることができるんですね。
面積というのはつまり積分です。

理工学の世界では日々積分を使うのですが、たまに積分不能な式になることがあります。
でもモンテカルロ法を使えば積分不能でもシミュレーションで積分の結果をおおよそ得ることができます。

このモンテカルロ法、近年では「マルコフ連鎖モンテカルロ法」という発展系が発明されて一時期の機械学習界隈で大流行しました。そんな話はまた別の機会に。

Got a question? Click to Chat