Pi from String Theory Amplitudes
From the paper by Arnab Priya Saha and Aninda Sinha. A new series for \(\pi\) and its convergence.
$$
\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}
$$
Where \((a)_{n-1}\) is the Pochhammer symbol.
$$
(a)_{n-1} = \frac{\Gamma(a + n - 1)}{\Gamma(a)}
$$
\(\lambda\) is a free parameter for optimizing convergence. As \(\lambda\) approaches infinity, the series reduces to the classic Madhava series. With \(\lambda\) between 10 and 100, the series takes 30 terms to converge to ten decimal places. Which is far more efficient than the classic Madhava series, which takes 5 billion terms to converge to ten decimal places.
This can be implemented in Python as follows:
import mpmath as mp
def mp_calculate_pi(lambda_val, iters):
mp.dps = 100
pi = mp.mpf(4)
n = 1
prev_pi = 0
factorial = mp.mpf(n)
for i in range(iters):
term1 = 1.0 / factorial
term2 = 1.0 / (n + lambda_val) - 4 / (2 * n + 1)
term3 = ((2 * n + 1) ** 2) / (4 * (n + lambda_val)) - n
pochhammer = 1
for i in range(n - 1):
pochhammer *= term3 + i
prev_pi = pi
pi += term1 * term2 * pochhammer
# print to 30 decimal places using mpmath
approx = mp.nstr(pi, 100)
# Compare to mp.pi to calcualte the delta
delta = abs(pi - mp.pi)
# numbers of digits that pi approximate is correct to
accuracy = round(abs(mp.log(abs(pi - mp.pi), 10)))
# Print a line with the current iteration, pi, delta
print(f'{n} {approx} {delta} {accuracy}')
n += 1
factorial = factorial * n
return pi, n - 1
lambda_val = 42
pi, n = mp_calculate_pi(lambda_val, 30)