交差する正弦波

交差する正弦波

2つの正弦波が交差するような3次元の方程式を取り上げて、Pythonでグラフ化することを考えてみましょう。

この例では、以下の方程式を考えます。

$$
z = \sin(x) + \cos(y)
$$

この方程式では、$ (x)軸$と$ (y)軸$に対してそれぞれ正弦波余弦波が影響を与え、3次元グラフでその交差を見ることができます。

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

# 3次元グラフの範囲を指定
x_range = np.linspace(-5, 5, 100)
y_range = np.linspace(-5, 5, 100)

# メッシュグリッドを作成
x, y = np.meshgrid(x_range, y_range)
z = np.sin(x) + np.cos(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('$z = \\sin(x) + \\cos(y)$')

plt.show()

このコードでは、matplotlibnumpyを使用して3Dプロットを行っています。

方程式には正弦波余弦波が含まれており、これによって独特の波形が3次元グラフ上に現れます。

[実行結果]

ソースコード解説

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

  1. ライブラリのインポート:
1
2
3
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
  • matplotlib.pyplotはグラフのプロットに使用されるライブラリです。
  • numpyは数学的な計算に使用され、ここでは特にメッシュグリッドを作成するために利用されます。
  • mpl_toolkits.mplot3dモジュールは、3Dプロットのためのツールキットを提供します。
  1. 3次元グラフの範囲の指定:
1
2
x_range = np.linspace(-5, 5, 100)
y_range = np.linspace(-5, 5, 100)
  • np.linspaceは指定された範囲内で等間隔の数値を生成します。ここでは、$ (x) $および$ (y) $軸の範囲を$ ([-5, 5]) $で100点に設定しています。
  1. メッシュグリッドの作成:
1
x, y = np.meshgrid(x_range, y_range)
  • np.meshgridは、$ (x) $および$ (y) $の範囲を元に2次元のメッシュグリッドを作成します。
    これにより、各点における$ (x) $と$ (y) $の組み合わせが得られます。
  1. 3Dプロットの計算:
1
z = np.sin(x) + np.cos(y)
  • ここでは、計算されたメッシュグリッド上の各座標における$ (z) $の値を、正弦波$ (\sin(x)) $と余弦波$ (\cos(y)) $の和として計算しています。
  1. 3Dプロットの作成:
1
2
3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
  • plt.figure()は新しい図を作成します。
  • fig.add_subplot(111, projection='3d')は3Dのサブプロットを作成します。
  • ax.plot_surfaceは3Dの曲面プロットを行います。
    ここではメッシュグリッド上の各座標における$ (x) $,$ (y) $,$ (z) $の値に基づいて表面をプロットしています。
    カラーマップは ‘viridis’ を使用しています。
  1. ラベルとタイトルの設定:
1
2
3
4
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('$z = \\sin(x) + \\cos(y)$')
  • ax.set_xlabel, ax.set_ylabel, ax.set_zlabel はそれぞれX軸、Y軸、Z軸に対するラベルを設定します。
  • ax.set_title はプロット全体にタイトルを設定します。
  1. グラフの表示:
1
plt.show()
  • plt.show()は、作成した図を表示します。

このコード全体で、正弦波余弦波の和によってできる波の形状を3Dグラフとして視覚化しています。

結果解説

[実行結果]

この3Dグラフは、以下の方程式に基づいて作成されました。

$$
z = \sin(x) + \cos(y)
$$

この方程式では、$ (x)軸$方向には正弦波$ (\sin(x)) $が影響を与え、$ (y)軸$方向には余弦波 $ (\cos(y)) $が影響を与えています。

これらの波が交差するところで、$ (z) $の値が計算されます。

以下はグラフの詳細な説明です:

軸の範囲:

$ (x)軸$と$ (y)軸$はそれぞれ$ ([-5, 5]) $の範囲で設定されています。
これは、波の周期や振幅を適切に表示するための範囲です。

メッシュグリッド:

np.meshgrid を使用して、指定した範囲のメッシュグリッドを生成しています。
これにより、$ (x) $と$ (y) $の各座標の組み合わせに対する$ (z) $の値が計算されます。

波の形状:

$ (z = \sin(x) + \cos(y)) $の計算結果により、各座標における$ (z) $の値が求められます。
正弦波余弦波が合成され、波の交差や波の振幅が視覚的に表現されます。

3Dプロット:

ax.plot_surface を使用して、メッシュグリッド上の$ (x) $,$ (y) $,$ (z) $の値に基づいて表面プロットを行っています。
カラーマップは ‘viridis’ を使用しています。

軸のラベルとタイトル:

ax.set_xlabel, ax.set_ylabel, ax.set_zlabel を使用して、それぞれの軸にラベルを付け、ax.set_title でグラフ全体にタイトルを付けています。

このグラフは、正弦波余弦波が複雑に絡み合ってできる特徴的な波形を視覚的に表現しています。