インドの物理学者がひも理論の研究から偶然「円周率」の新しい公式を発見
いやー、こういう発見があるから数学は面白い。数学が「自然科学の言語」と言われるのも納得です。
原論文はこちら。実際の計算公式は以下のとおりです。
\begin{eqnarray*}
\pi=4+\sum_{n=1}^{\infty}\frac{1}{n!}\left(\frac{1}{n+\lambda} -
\frac{4}{2n+1}\right)\left(\frac{(2n+1)^{2}}{4(n+\lambda)}-n\right)_{n-1}
\end{eqnarray*}
2つほど補足すると、唐突に出てくる\(\lambda\)は実部が\(-1\)より大きな任意の複素数、右下の小さな\({}_{n-1}\)はポッホハマー記号(昇冪)です。
Pythonで書くとこんな感じ。元の式をできるだけ忠実に表しているので、メモ化などの最適化はしていません。
# https://gigazine.net/news/20240619-string-theory-pi/
# 原論文: https://journals.aps.org/prl/pdf/10.1103/PhysRevLett.132.221601
import math
def poch(x: float, n: int) -> float:
# ポッホハマー記号(昇冪)
# https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%83%E3%83%9B%E3%83%8F%E3%83%9E%E3%83%BC%E8%A8%98%E5%8F%B7
y = 1
for j in range(n):
y *= x + j
return y
def term(lambda_: float, n: int) -> float:
# 第n項を計算
a = 1/(n+lambda_) - 4/(2*n+1)
b = (2*n+1)**2 / (4*(n + lambda_)) - n
return a * poch(b, n-1) / math.factorial(n)
def pi(lambda_: float, n: int) -> float:
# 円周率を計算
p = 4
for n_ in range(1, n):
p += term(lambda_, n_)
return p
print(pi(1000, 100))
Python Praygroundにコードを貼り付けると結果が出てきます。pi
関数に渡す値を色々いじって遊んでみてください。