2018年6月11日月曜日

開発環境

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の5章(集合と確率を操作する)、5.4(プログラミングチャレンジ)、問題5-5(円の領域を推定する)を取り組んでみる。

コード(Emacs)

Python 3

#!/usr/bin/env python3
from sympy import pi, sqrt
import random


def estimate(r, darts):
    n = 0
    for _ in range(darts):
        x = random.uniform(-r, r)
        y = random.uniform(-r, r)
        if sqrt(x ** 2 + y ** 2) <= r:
            n += 1
    return n / darts * (2 * r) ** 2


def estimated_pi(darts):
    n = 0
    for _ in range(darts):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        if sqrt(x ** 2 + y ** 2) <= 1:
            n += 1
    return 4 * n / darts


if __name__ == '__main__':
    r = 2
    print(f'Radius: {r}')
    area = pi * r ** 2
    for i in [3, 5, 6]:
        darts = 10 ** i
        e = estimate(r, darts)
        p = estimated_pi(darts)
        print(f'Area: {float(area)}, Estimated ({darts} darts): {e}, π: {p}')

入出力結果(Terminal, Jupyter(IPython))

$ ./sample5.py
Radius: 2
Area: 12.566370614359172, Estimated (1000 darts): 12.688, π: 3.104
Area: 12.566370614359172, Estimated (100000 darts): 12.5496, π: 3.14368
Area: 12.566370614359172, Estimated (1000000 darts): 12.58048, π: 3.143884
$

0 コメント:

コメントを投稿