[Pythonで数学]ライプニッツの公式とバーゼルの問題で円周率を算出する
ライプノッチの公式
円周率を求めることができる式。\(\displaystyle (-1)^n \)の\(\displaystyle n \)が偶数ならプラス、奇数ならマイナスになる。(\(\displaystyle \infty \))まで、総和を取ることはできないが、無限に近づくほど円周率の精度は上がっていく。また、浮動小数点の精度の問題も出てくるので、今回は上限を10000にする。
\(\displaystyle \sum_{n=0}^{\infty} \frac{(-1)^n}{2n + 1} = \frac{\pi}{4}\)
\(\displaystyle \frac{1}{1} – \frac{1}{3} + \frac{1}{5} – \frac{1}{7} + \frac{1}{9} – \cdots = \frac{\pi}{4} \)
# 円周率
pi = 0.0
# 上限
max = 10000
for n in range(max + 1):
# (-1)のn乗
numerator = (-1) ** n
# (2n + 1)
denominator = 2 * n + 1
# 足していく
pi += numerator / denominator
pi *= 4
print(pi)
ちゃんと正確な円周率が算出された。
3.1416926435905346
試しに、上限maxを1000000にしてみるとちゃんと精度上がった。
3.1415936535887745
バーゼルの問題
平方根の逆数全ての和はいくつになるのかという問題。そして答えは円周率の2乗の\(\displaystyle \frac{\pi^2}{6}\)となる。
\(\displaystyle \sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}\)
# 円周率
pi = 0.0
# 上限
max = 1000000
for n in range(1, max):
# 1 / (nの2乗)
pi += 1 / (n ** 2)
# 平方根を取る
print(math.sqrt(pi * 6))
実際、円周率はmathモジュールやnumpyで簡単に出てくる。
import math
import numpy as np
print(math.pi)
print(np.pi)
記事を読んでいただきありがとうございました。