リーマンゼータ関数

リーマンゼータ関数

3次元方程式の一例として、リーマンゼータ関数のモジュラー形式が挙げられます。

リーマンゼータ関数は複素数$ (s) $に対して次のように定義されます。

$$
\zeta(s) = \sum_{n=1}^{\infty} \frac{1}{n^s}
$$

モジュラー形式についての厳密な表現は複雑ですが、その近似式として次のような方程式があります。

$$
f(x, y) = \sum_{n=1}^{\infty} \left( \frac{1}{n^{2 + ix}} + \frac{1}{n^{2 - ix}} \right) \cos\left( \frac{n\pi y}{2} \right)
$$

これをPythonで解き、3Dグラフ化するコードを以下に示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# リーマンゼータ関数のモジュラー形式の近似式
def zeta_function(x, y, terms=100):
result = 0
for n in range(1, terms + 1):
result += (1 / (n ** (2 + 1j * x)) + 1 / (n ** (2 - 1j * x))) * np.cos(n * np.pi * y / 2)
return np.real(result)

# x, y の値の範囲
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)

# リーマンゼータ関数のモジュラー形式の値を計算
Z = zeta_function(X, Y)

# 3Dグラフの描画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Zeta Function (Modular Form)')
plt.show()

このコードは、リーマンゼータ関数のモジュラー形式の近似式を計算し、3Dグラフで可視化します。

[実行結果]

ソースコード解説

以下にコードの詳細な説明を示します。

1. NumPyとMatplotlibのインポート:

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • numpy は数値計算を行うためのライブラリです。
  • matplotlib.pyplot はグラフの描画に使用されるライブラリです。
  • mpl_toolkits.mplot3d は3Dグラフの描画に必要なツールキットです。

2. リーマンゼータ関数のモジュラー形式の近似式:

1
2
3
4
5
def zeta_function(x, y, terms=100):
result = 0
for n in range(1, terms + 1):
result += (1 / (n ** (2 + 1j * x)) + 1 / (n ** (2 - 1j * x))) * np.cos(n * np.pi * y / 2)
return np.real(result)
  • zeta_function 関数は、リーマンゼータ関数のモジュラー形式の近似式を計算します。
  • 近似式は、$(x) $と$ (y) $の2つの変数に依存します。
  • 近似式は、与えられた$ (x) $と$ (y) $の値に対して計算され、その結果が result に保存されます。

3. x, y の値の範囲の設定:

1
2
3
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
X, Y = np.meshgrid(x, y)
  • np.linspace() 関数は、指定された範囲内で等間隔の数値配列を生成します。
    ここでは、$-10$から$10$までの範囲を$100$分割した値を生成しています。
  • np.meshgrid() 関数は、2つの1次元配列から格子状の座標を生成します。
    ここでは、$x$ と$ y $の値の組み合わせを格納する XY を生成しています。

4. リーマンゼータ関数のモジュラー形式の値を計算:

1
Z = zeta_function(X, Y)
  • zeta_function 関数を用いて、各点$ (x, y) $におけるリーマンゼータ関数のモジュラー形式の近似値を計算し、Z に保存します。

5. 3Dグラフの描画:

1
2
3
4
5
6
7
8
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Zeta Function (Modular Form)')
plt.show()
  • plt.figure() で新しい図を生成し、fig に保存します。
  • fig.add_subplot(111, projection='3d') で3Dサブプロットを生成し、ax に保存します。
  • ax.plot_surface() で3Dサーフェスプロットを描画します。ここでは、$ (x) $、$ (y) $、$ (z) $の値が XYZ に格納されていると仮定しています。
  • ax.set_xlabel()ax.set_ylabel()ax.set_zlabel() でそれぞれ軸ラベルを設定します。
  • ax.set_title() でグラフのタイトルを設定します。
  • plt.show() でグラフを表示します。

結果解説

[実行結果]

このグラフは、リーマンゼータ関数のモジュラー形式の近似式に基づいて描かれています。
リーマンゼータ関数は数学的に興味深い関数であり、数論や解析数学などの分野で重要な役割を果たしています。

具体的には、グラフは3次元空間上に描かれており、横軸は$(x)$、縦軸は$(y)$となっています。
そして、それぞれの点$(x, y)$における関数の値が、高さ方向に表されています。

リーマンゼータ関数のモジュラー形式は、$(x)$と$(y)$の2つの変数に依存する関数であり、その表現は複雑です。
このグラフでは、$(x)$と$(y)$の値が与えられたときの関数の値が色で表現されています。
色の濃淡は関数の値の大きさを示しており、明るい色ほど関数の値が大きく、暗い色ほど関数の値が小さいことを意味します。

リーマンゼータ関数は数学的に興味深い特性を持ち、特にリーマン予想と呼ばれる未解決問題との関連があります。
このグラフは、そのような数学的な概念を視覚的に理解する手助けとなることができます。