>開発>[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)

数学

記事を読んでいただきありがとうございました。

Page Top