バーゼル問題

目次

バーゼル問題とその解

$$ \sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6} $$

収束性

この無限級数が収束することは早くから知られていた。

$$ \sum_{n=1}^{N} \frac{1}{n^2} \le 1 + \sum_{n=2}^{N} \frac{1}{n(n-1)} = 1 + \sum_{n=2}^{N} (\frac{1}{n-1} - \frac{1}{n}) = 1 + (1 - \frac{1}{N}) \le 2 $$

となり、上に有界な単調増加列であることが示される。

オイラーによる解

オイラーは正弦関数を因数分解するというアイディアによりこれを解決した。

$\sin{x}$は$x = 0, \pm \pi, \pm 2 \pi, … \pm n \pi, …$でゼロとなり、また、$x=0$の周辺で$\sin{x} \sim x$となることから、 形式的に次のように因数分解される。

$$ \sin{x} = x (1 - \frac{x^2}{\pi^2}) (1 - \frac{x^2}{2^2\pi^2}) … (1 - \frac{x^2}{n^2\pi^2}) … $$

右辺を展開すると、

$$ \sin{x} = x \{ 1 - (\frac{1}{\pi^2} + \frac{1}{2^2\pi^2} + … + \frac{1}{n^2\pi^2} + …) x^2 + … \} $$

一方、マクローリン展開により、

$$ \sin{x} = x - \frac{x^3}{3!} + \frac{x^5}{5!} + … $$

である。

$x^3$の係数を比較して、

$$ \frac{1}{\pi^2} + \frac{1}{2^2\pi^2} + … = \frac{1}{3!} $$

両辺$\pi^2$を乗じると、

$$ \frac{1}{1^2} + \frac{1}{2^2} + … = \frac{\pi ^ 2}{6} $$

を得る。

大胆な方法であるが、現代ではこの議論は正当化されている。

収束の様子

収束の様子は次のようになる。収束は早くない。

この図を描画する際に使用したPythonのコードは以下である。

#! /usr/bin/env python

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = (32.0, 24.0)
plt.rcParams["lines.markersize"] = 2

a = np.arange(1, 101)

b = 1 / a**2

c = np.cumsum(b)

lim = np.pi ** 2 / 6

plt.title(r"$\sum{\frac{1}{n^2}}$", fontsize=30)
plt.plot(a, c, marker="o", lw=5, color="#00BCD4", markersize=8)

plt.yticks(
    [1, lim * 3 / 4, lim],
    [r"$1$", r"$\frac{\pi^2}{8}$", r"$\frac{\pi^2}{6}$"],
    fontsize=30,
)
plt.xticks(fontsize=30)
plt.xlim([1, 100])
plt.grid()

plt.savefig("basel-problem.png", bbox_inches="tight", transparent=True)

正弦関数の無限積展開の収束の様子

オイラーの用いた因数分解

$$ \sin{x} = x (1 - \frac{x^2}{\pi^2}) (1 - \frac{x^2}{2^2\pi^2}) … (1 - \frac{x^2}{n^2\pi^2}) … $$

の収束の様子は、次のようになる。

この図を描画する際に使用したPythonのコードは以下である。

#! /usr/bin/env python

import numpy as np
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = (32.0, 24.0)
plt.rcParams["lines.markersize"] = 2


plt.title(r"convergence of infinite product of $\sin{x}$", fontsize=30)

for i in range(5):

    def f(x):
        y = x.copy()
        for j in range(1, i + 1):
            y *= 1 - x**2 / (j**2 * np.pi**2)
        return y

    a = np.linspace(-np.pi, np.pi, 500)
    b = f(a)
    plt.plot(a, b, label=f"{i}", lw=5)

a = np.linspace(-np.pi, np.pi, 500)
b = np.sin(a)
plt.plot(a, b, label="sin", lw=10)


plt.yticks([-1, 0, 1], fontsize=30)
plt.xticks(
    [-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi],
    [r"$-\pi$", r"$-\frac{\pi}{2}$", "0", r"$\frac{\pi}{2}$", r"$\pi$"],
    fontsize=30,
)
plt.legend(fontsize=20, framealpha=0.0, bbox_to_anchor=(1.0, 0.95))
plt.grid()
plt.axis("scaled")
plt.xlim([-np.pi, np.pi])
plt.ylim([-2, 2])

plt.savefig("basel-problem-inf-prod-sin.png", bbox_inches="tight", transparent=True)