双曲面の方程式

双曲面の方程式

双曲面の方程式をPythonで解いてグラフ化する方法を示します。

ここでは、主軸が$ (z) $軸に平行な双曲面の方程式を例に取ります。

双曲面の方程式:
$$
[ \frac{x^2}{a^2} + \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1 ]
$$

この方程式をグラフ化するために、NumPyMatplotlibを使用します。

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
29
30
31
32
33
34
35
36
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 双曲面のパラメータ
a = 2.0 # x方向の半軸の長さ
b = 3.0 # y方向の半軸の長さ
c = 4.0 # z方向の半軸の長さ

# パラメータの範囲設定
u = np.linspace(-2, 2, 100)
v = np.linspace(-2, 2, 100)
U, V = np.meshgrid(u, v)

# 双曲面の方程式をパラメータ表示で定義
X = a * np.cosh(U) * np.cos(V)
Y = b * np.cosh(U) * np.sin(V)
Z = c * np.sinh(U)

# 3Dプロット
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')

# 双曲面をプロット
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='k')

# 軸ラベルの設定
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# グラフのタイトル
plt.title('Hyperboloid')

# グラフを表示
plt.show()

このコードでは、双曲面のパラメータ$ (a, b, c) $を指定しています。

そして、双曲線の方程式をパラメータ$ (U, V) $の関数として定義し、それを使用して$ (X, Y, Z) $座標を計算しています。

最後に、計算した座標を用いてMatplotlibplot_surface関数で双曲面をプロットしています。

このコードを実行すると、指定した双曲面3次元グラフとして表示されます。

[実行結果]

ソースコード解説

ソースコードの詳細な説明は以下の通りです。

1. ライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • numpy: 数値計算ライブラリ。配列操作や数学関数を提供。
  • matplotlib.pyplot: グラフ描画ライブラリ。
  • mpl_toolkits.mplot3d: 3次元プロット用のツールキット。

2. 双曲面のパラメータ設定

1
2
3
a = 2.0  # x方向の半軸の長さ
b = 3.0 # y方向の半軸の長さ
c = 4.0 # z方向の半軸の長さ
  • 双曲面の各軸方向の半軸の長さを設定します。

3. パラメータの範囲設定とメッシュグリッド作成

1
2
3
u = np.linspace(-2, 2, 100)
v = np.linspace(-2, 2, 100)
U, V = np.meshgrid(u, v)
  • np.linspace: 指定された範囲内で等間隔の数値を生成。
  • meshgrid: 2つの1次元配列から2次元グリッドを生成。

4. 双曲面の方程式をパラメータ表示で定義

1
2
3
X = a * np.cosh(U) * np.cos(V)
Y = b * np.cosh(U) * np.sin(V)
Z = c * np.sinh(U)
  • 双曲面の方程式をパラメータ$ (U) $と$ (V) $の関数として定義します。
  • np.cosh: 双曲線余弦関数。
  • np.sinh: 双曲線正弦関数。

5. 3Dプロットの準備

1
2
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')
  • plt.figure: 新しい図を作成します。
  • fig.add_subplot: サブプロットを追加します。
    ここでは3次元の図を作成しています。

6. 双曲面のプロット

1
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='k')
  • ax.plot_surface: 双曲面を3Dプロットします。
  • cmap='viridis': カラーマップViridisに設定。
  • edgecolor='k': エッジの色を黒色に設定。

7. 軸ラベルとタイトルの設定

1
2
3
4
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.title('Hyperboloid')
  • 軸ラベルとグラフのタイトルを設定します。

8. グラフの表示

1
plt.show()
  • 作成した3Dグラフを表示します。

このソースコードを実行すると、定義された双曲面の方程式に基づいて双曲面が描画され、その3次元形状が視覚化されます。

結果解説

[実行結果]

以下はグラフに表示される内容の詳細です。

1. 双曲面の方程式:

双曲面の方程式は次のように表されます。
$$
\frac{x^2}{a^2} + \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1
$$
この方程式は、$ (a, b, c) $を用いて定義される双曲面の形状を示しています。
この例では主軸が$ (z) $軸に平行な双曲面を扱います。

2. パラメータ設定:

  • (u, v) はそれぞれパラメータ空間の値を表します。
    np.linspace(-2, 2, 100) を使用して、それぞれのパラメータの値を生成します。
  • U, V はこれらのパラメータのメッシュグリッドを作成します。

3. 座標計算:

  • 双曲面の方程式をパラメータ表示で定義します。
    $ X = a \cosh(U) \cos(V) $
    $ Y = b \cosh(U) \sin(V) $
    $ Z = c \sinh(U) $
    ここで、$ (\cosh) $は双曲線余弦関数、$ (\sinh) $は双曲線正弦関数です。

4. 3Dプロット:

  • plot_surface 関数を使用して、双曲面の$ (X, Y, Z) $座標を3次元空間にプロットします。
  • cmap='viridis'カラーマップを指定し、edgecolor='k'エッジの色を黒に設定します。

5. グラフの装飾:

  • 軸ラベルやタイトルを設定して、グラフをわかりやすくします。
  • $X$軸は ‘X’、$Y$軸は ‘Y’、$Z$軸は ‘Z’ としてラベル付けされます。
  • グラフのタイトルは ‘Hyperboloid’ となります。

6. グラフの表示:

  • 最後に plt.show() を使用して、作成した3Dグラフを表示します。

このコードを実行すると、$ (a, b, c) $の値に基づいて定義された双曲面が3次元プロットで表示されます。

双曲面の形状曲線が視覚化され、指定したパラメータによって変化する様子を確認できます。