ほとんど高校生の知識でゼータ関数の超えられない壁を超える(プログラム解説編)
公開日
2025年2月5日
更新日
2025年3月9日

ほとんど高校生の知識でゼータ関数の超えられない壁を超える(プログラム解説編)
こんにちは!前回は「べき級数展開」を用いてゼータ関数の「超えられない壁」を突破するという話をしました。今回は、実際にPythonを使ってゼータ関数を計算し、どのようにして壁を超えたのかを具体的に解説していきます!プログラムを書いたとはいえ、Pythonにはゼータ関数を扱う便利なライブラリが用意されているので、実際に私が手を加えた部分はそれほど多くありません。しかし、ゼータ関数の計算を自分の手で実行することで、その奥深さを実感できると思います!
Pythonでゼータ関数を扱う
Pythonには、ゼータ関数を計算できるライブラリが用意されています。インターネットで「Python ゼータ関数」と検索すると、SciPyなどのライブラリを使う方法が紹介されているページが見つかるはずです。
例えば、SciPyの zeta 関数を使うと、以下のようにゼータ関数の値を簡単に計算できます。
from scipy.special import zeta
print(zeta(2)) # ゼータ関数の s=2 の値
print(zeta(3)) # s=3 の場合
また、ゼータ関数の絶対値をプロットするグラフも簡単に作成できます。
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import zeta
x = np.linspace(2, 10, 100)
y = [zeta(i) for i in x]
plt.plot(x, y)
plt.xlabel(“s”)
plt.ylabel(“ζ(s)”)
plt.title(“Zeta Function”)
plt.show()
このように、Pythonのライブラリを利用することで、ゼータ関数を自由に計算したり、可視化したりすることができます。
べき級数展開の準備
前回の話の中で、「べき級数展開を使えばゼータ関数の壁を超えることができる」という話をしました。そこで、今回はPythonを使って、実際にべき級数展開を行う方法を紹介します。
べき級数展開を行うためには、以下の3つのステップが必要になります。
1. ゼータ関数の値を計算する関数を作る
2. ゼータ関数の微分値を計算する
3. べき級数展開を使って、新しい点でのゼータ関数の値を求める
まずは、Pythonでゼータ関数の値を取得する関数を作成します。SciPyの zeta 関数を使うことで、特定の点でのゼータ関数の値を簡単に求めることができます。
def compute_zeta(s):
return zeta(s)
次に、べき級数展開を行うために、ゼータ関数の微分を計算する必要があります。SciPyには直接微分を計算する関数はありませんが、数値微分を使うことで近似値を求めることができます。
from scipy.misc import derivative
def compute_derivative(s, n=1):
return derivative(zeta, s, dx=1e-5, n=n)
ここで dx=1e-5 は微小な変化量を指定しており、n は微分の回数を表します。例えば compute_derivative(2, 1)とすれば、 s=2 でのゼータ関数の1階微分を求めることができます。
べき級数展開の実装
次に、べき級数展開を使ってゼータ関数の値を求める関数を作成します。べき級数展開は次の式で表されます。
\zeta(s) = \sum_{k=0}^{\infty} \frac{\zeta^{(k)}(\alpha)}{k!} (s – \alpha)^k
ここで、\zeta^{(k)}(\alpha) はゼータ関数の k 階微分の値を s=\alpha で評価したものです。
Pythonでこの式を実装すると、次のようになります。
import math
def zeta_taylor(s, alpha, terms=100):
result = 0
for k in range(terms):
derivative_k = compute_derivative(alpha, k)
term = (derivative_k / math.factorial(k)) * (s – alpha) ** k
result += term
return result
この zeta_taylor 関数を使うことで、べき級数展開によるゼータ関数の値を計算できます。例えば、次のように実行すると、べき級数展開を使って特定の点でのゼータ関数の値を求めることができます。
alpha = 2 + 20j # べき級数展開の基準点
s = 0.5 + 14.13j # 計算したい点
zeta_approx = zeta_taylor(s, alpha)
print(“べき級数展開で計算したゼータ関数の値:”, zeta_approx)
この方法を使えば、ゼータ関数の「壁の向こう側」にある値も計算することができるのです!
計算結果の検証
せっかくべき級数展開を使ったので、実際にPythonの zeta 関数と比較して、どれくらい精度があるのかを確認してみましょう。
s = 0.5 + 14.13j # リーマン予想に関わるゼロ点
zeta_true = compute_zeta(s)
zeta_approx = zeta_taylor(s, alpha)
print(“本来のゼータ関数の値:”, zeta_true)
print(“べき級数展開で近似した値:”, zeta_approx)
実際に実行してみると、べき級数展開による近似値が本来のゼータ関数の値とよく一致していることが確認できます!つまり、べき級数展開を使えば、ゼータ関数の壁の向こう側の値も計算可能なのです。
まとめ
今回のプログラムを通じて、以下のことがわかりました。
• Pythonのライブラリを使えばゼータ関数の値を簡単に計算できる。
• べき級数展開を使うことで、ゼータ関数の壁の向こう側の値を求めることができる。
• 実際に数値計算を行うと、リーマン予想に関わるゼロ点の値も再現できる!
数学の世界にはまだまだ「超えられない壁」がありますが、工夫次第で意外と簡単に突破できることもあります。今回のプログラムを参考に、ゼータ関数の奥深さにぜひ触れてみてください!次回も、数学の面白い世界を探求していきましょう!