仮想計算機構

IT業界と無縁な派遣社員のブログ

ゼータ関数の等高線のプロット

ゼータ関数によって実軸上または虚軸上にマッピングされる複素数について考えます。そのような複素数の集合はどのような形をしているでしょうか。幸いなことに現代人にはコンピュータがあります。今回は、既存の Python ライブラリを活用して以下の図を作成しました。


色分けは以下のとおりです。

色違いの曲線が交わる点がゼータ関数の零点になっています。また、クリティカルライン上に非自明な零点が並んでいることがわかります。

プログラム

import numpy as np
import matplotlib.pyplot as plt
from mpmath import *

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

xmin,xmax=-9,10
ymin,ymax=-8,35

x = np.arange(xmin,xmax,0.1)
y = np.arange(ymin,ymax,0.1)
X, Y = np.meshgrid(x, y)
Z1 = np.zeros(X.shape)
Z2 = np.zeros(X.shape)

for i in range(X.shape[0]):
    for k in range(X.shape[1]):
        z = zeta(X[i][k]+Y[i][k]*1j)
        Z1[i][k] = re(z)
        Z2[i][k] = im(z)
        
ax.set_xlim(xmin,xmax)
ax.set_ylim(ymin,ymax)
ax.grid()
ax.contour(X, Y, Z1,colors='#5ec962')
ax.contour(X, Y, Z2,colors='#482878')
ax.plot([0.5,0.5],[ymin,ymax],'--')
plt.show()