球面調和関数の例

球の表面上の球面調和関数と3D極座標プロットをプロットします.

この例では,scipyが必要です.

この例では,mlabのメッシュ関数 mayavi.mlab.mesh() を使用します.サーフェスをプロットする場合,これは非常に用途の広い機能です.サーフェスは,2次元グリッドの関数として定義できます.

それぞれの球面調和関数について,その値を球の表面上にプロットし,次に極性でプロットします.極プロットは,前の球の半径を変更することによって簡単に得られます.

../_images/example_spherical_harmonics.jpg

Pythonソースコード: spherical_harmonics.py


# Author: Gael Varoquaux <gael.varoquaux@normalesup.org>
# Copyright (c) 2008, Enthought, Inc.
# License: BSD Style.

from mayavi import mlab
import numpy as np
from scipy.special import sph_harm

# Create a sphere
r = 0.3
pi = np.pi
cos = np.cos
sin = np.sin
phi, theta = np.mgrid[0:pi:101j, 0:2 * pi:101j]

x = r * sin(phi) * cos(theta)
y = r * sin(phi) * sin(theta)
z = r * cos(phi)

mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0, 0, 0), size=(400, 300))
mlab.clf()
# Represent spherical harmonics on the surface of the sphere
for n in range(1, 6):
    for m in range(n):
        s = sph_harm(m, n, theta, phi).real

        mlab.mesh(x - m, y - n, z, scalars=s, colormap='jet')

        s[s < 0] *= 0.97

        s /= s.max()
        mlab.mesh(s * x - m, s * y - n, s * z + 1.3,
                  scalars=s, colormap='Spectral')

mlab.view(90, 70, 6.2, (-1.3, -2.9, 0.25))
mlab.show()