球面調和関数

球面調和関数

球面調和関数は、球面上で定義される特殊な関数であり、主に物理学数学で重要な役割を果たします。
これらの関数は、球対称性を持つ問題の解析や、量子力学電磁気学地球物理学などの分野で広く利用されています。

簡単に説明すると、球面調和関数は次のような性質を持ちます:

1. 球面上の各点で定義される:

球面調和関数は、球面上のあらゆる点で定義されます。
これは、球面全体での振る舞いを表現するために使用されます。

2. 角度の依存性:

球面調和関数は、球面上の特定の点における方向を示す角度に依存します。
これらの関数は、極座標系球面座標系で使用されることが一般的です。

3. $l$および$m$のパラメータ:

球面調和関数は、2つの整数パラメータである$l$(次数)と$m$(オーダー)によって特徴付けられます。
$l$は関数の振る舞いを決定する主要なパラメータであり、$m$は角度の方向性回転対称性を表します。

4. 特定の振る舞い:

球面調和関数は、角度の変化に応じて特定の振る舞いを示します。
例えば、特定のlおよびmの組み合わせでは球面上でピークや谷が形成され、他の組み合わせでは球面上で特定の方向に向かうような特定のパターンが現れます。

簡単に言えば、球面調和関数は球面上での振る舞いを表現するための数学的な道具であり、物理学や数学のさまざまな問題において、球対称性を持つシステムの解析に役立ちます。

ソースコード

球面調和関数は、数値計算ライブラリのSciPyに含まれている scipy.special.sph_harm 関数を使用して計算できます。

以下のPythonコードは、球面調和関数の方程式を解いてグラフ化するものです。

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
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.special import sph_harm

# パラメータの設定
theta = np.linspace(0, np.pi, 100)
phi = np.linspace(0, 2 * np.pi, 100)
theta, phi = np.meshgrid(theta, phi)

# 球面調和関数の計算
l = 3 # l (degree)
m = 2 # m (order)
Y_lm = sph_harm(m, l, phi, theta).real

# 球面座標から直交座標への変換
x = Y_lm * np.sin(theta) * np.cos(phi)
y = Y_lm * np.sin(theta) * np.sin(phi)
z = Y_lm * np.cos(theta)

# グラフのプロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')

# グラフの装飾
ax.set_title(f"Spherical Harmonic (l={l}, m={m})")
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()

このコードでは、$l$と$m$の値を調整することで異なる球面調和関数をプロットできます。

[実行結果]

ソースコード解説

このソースコードは、Pythonを使用して球面調和関数を計算し、3次元グラフとして可視化するものです。
以下はコードの章立て詳細な説明です。

ライブラリのインポート

  • import numpy as np:
    数値計算用のライブラリであるNumPyをインポートします。
    npはNumPyの標準的な別名です。
  • import matplotlib.pyplot as plt:
    グラフ描画用のライブラリであるMatplotlibpyplotモジュールをインポートします。
    pltは一般的な別名です。
  • from mpl_toolkits.mplot3d import Axes3D:
    3次元グラフ描画用のモジュールをインポートします。
  • from scipy.special import sph_harm:
    SciPyライブラリの特殊関数モジュールから、球面調和関数をインポートします。

パラメータの設定

  • theta = np.linspace(0, np.pi, 100):
    $0$から$π$の範囲を$100$個の等間隔で分割した配列を生成し、$θ$の値として設定します。
    ここで、$θ$は極角です。
  • phi = np.linspace(0, 2 * np.pi, 100):
    $ 0$から$2π$の範囲を$100$個の等間隔で分割した配列を生成し、$φ$の値として設定します。
    ここで、$φ$は方位角です。
  • theta, phi = np.meshgrid(theta, phi):
    thetaphiの配列から格子状の座標を生成します。

球面調和関数の計算

  • l = 3:
    球面調和関数の次数(degree)を$3$に設定します。
  • m = 2:
    球面調和関数のオーダー(order)を$2$に設定します。
  • Y_lm = sph_harm(m, l, phi, theta).real:
    sph_harm関数を使用して球面調和関数を計算します。
    .real属性を使用して実部を取得します。

球面座標から直交座標への変換

  • x = Y_lm * np.sin(theta) * np.cos(phi):

球面座標系から直交座標系への変換を行います。

  • y = Y_lm * np.sin(theta) * np.sin(phi):
    同様に、$y$座標を計算します。
  • z = Y_lm * np.cos(theta):
    同様に、$z$座標を計算します。

グラフのプロット

  • fig = plt.figure():
    新しい図を作成します。
  • ax = fig.add_subplot(111, projection='3d'):
    3次元のサブプロットを追加します。
  • ax.plot_surface(x, y, z, cmap='viridis'):

球面調和関数の結果を表す3次元曲面をプロットします。

グラフの装飾

  • ax.set_title(f"Spherical Harmonic (l={l}, m={m})"): グラフのタイトルを設定します。
    使用された球面調和関数の次数オーダーが表示されます。
  • ax.set_xlabel('X'):
    $x$軸のラベルを設定します。
  • ax.set_ylabel('Y'):
    $y$軸のラベルを設定します。
  • ax.set_zlabel('Z'):
    $z$軸のラベルを設定します。

グラフの表示

  • plt.show(): グラフを表示します。

これにより、球面調和関数の3次元グラフが生成され、その特性が視覚化されます。

結果解説

[実行結果]

このPythonコードによって生成されるグラフは、球面調和関数の特定のモード($l$および$m$の値によって決まる)を可視化します。
以下はグラフの詳細な説明です。

1. グラフの形状:

  • グラフは3次元の球面で表現されます。
    球面の各点には、球面調和関数の値に応じて高さが割り当てられます。
  • 球面の外側は色で示され、色の濃淡は球面調和関数の値を表します。
    濃い部分は正の値を示し、薄い部分は負の値を示します。
  • グラフの中央付近が高いピークを持つことがあります。
    このピークは球面調和関数の特性によるもので、球面の中心における極小値または極大値を表します。

2. 軸と座標系:

  • グラフは3次元座標系で表示されます。
    $x$軸、$y$軸、$z$軸があり、それぞれが直交座標系の座標を表します。
  • $x$軸と$y$軸は平面上にあり、球面上の点の位置を決定します。
    z軸は高さを表します。

3. グラフのタイトル:

  • グラフのタイトルには、使用された球面調和関数のパラメータが含まれます。
    例えば、”Spherical Harmonic ($l=3$, $m=2$)” のような形式です。
  • “l” は球面調和関数の次数を示し、球面の形状に影響を与えます。
  • “m” は球面調和関数のオーダーを示し、球面の回転対称性に関連しています。

このように、グラフは球面上の特定のモードに関連付けられた球面調和関数の振る舞いを視覚的に表現します。