0
1

More than 3 years have passed since last update.

3月14日は円周率の日

Posted at

3.14159265 ...
3月14日は円周率の日というそうです。1時59分 もしくは 15時9分にお祝いするのだそうな。特に、3/14/1592 6:53.58(1592年3月14日6時53分58秒)は、円周率の上12桁に一致するため、究極の円周率の日といわれているそうです。

さて、先日、知人とお酒を飲んでいるときに、なぜか『今から円周率を求めてみよう』となり、その場でiPhone/Pythonista 3 (Python3)を使いながらプログラミングしてみました。酔っていても、意外とできるものです。インターネットを調べていると円周率を求める方法は様々あることがわかり、そのうち2つを試してみました。どちらの方法でも3.14付近の数値が求められます。

直交座標系のモンテカルロ法

まずは、縦0~1、横0~1の正方形の中にランダムでボールを落としていって、原点からの距離が1.0以内である確率を求め、それを四分円の面積と見て円周率を求める方法です。

# 直交座標系のモンテカルロ法
import random

N= 1000000
point = 0

for i in range(N):
    x = random.random()
    y = random.random()

    r = (x*x + y*y)
    if r < 1 :
        point = point +1

pi = 4.0 * point / N

print(pi)

極座標系のモンテカルロ法 ~ ビュフォンの針

x/yの直交座標系ではなく、r/θの極座標系のモンテカルロ法でも円周率を求められるようです。等間隔に直線を引いた紙の上に、その感覚と同じ長さの針を投げて、針と線が触れる確率から円周率を求められるそうです。この発想が凄い!ですが、その説明が私には難しいので、こちらのサイトを参考に・・・プログラムだけは書いてみました。

# 極座標系のモンテカルロ法 ~ ビュフォンの針
import math
import random


N= 1000000
point = 0

for i in range(N) :
    r = random.random()
    theta = random.random() * 360
    if 0 > r - math.sin(math.radians(theta)) :
        point = point + 1

pi = N / point
print(pi)

これは面白いですね。ちなみに、本稿の投稿日は2019年3月14日です。

それでは、良い円周率の日を!

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1