Wikipediaの球Bessel関数のグラフ(Spherical Bessel functions: jn, yn (Wikipedia))を描きます.クラスを使う必要はないのですが,あえてできるだけクラスを使ったコードで遊んでみました.
クラスの簡単な使い方と同時に,キーワード可変長変数(**kwargs)の使い方や,辞書型が**で展開できること(** Dictionary Unpacking — Python Reference (The Right Way) 0.1 documentation)などが学べます.
コードと出力結果

他にも,グラフのプロット方法を指定する変数をパラメータにすれば,設定(例えば描画範囲)を変えてグラフを作成することも簡単です(その際は,ファイル名も変数で指定できるように書き換える必要があります).
import numpy as np from scipy.special import spherical_jn, spherical_yn import matplotlib.pyplot as plt import seaborn as sns param_order = { 'n_min': 0, 'n_max': 2 } param_range = { 'z_min': 0, 'z_max': 20, 'z_num': 100 } class SphericalBessel: def __init__(self, **kwargs): self.n = np.arange(kwargs['n_min'], kwargs['n_max']+1, 1) self.z = np.linspace(kwargs['z_min'], kwargs['z_max'], kwargs['z_num']) def create_data(self, n): jn = spherical_jn(n, self.z, derivative=False) yn = spherical_yn(n, self.z, derivative=False) return jn, yn def plot(self): sns.set() fig = plt.figure() ax1 = fig.add_subplot(2, 1, 1) ax2 = fig.add_subplot(2, 1, 2) for i in self.n: jn, yn = self.create_data(i) ax1.plot(self.z, jn, label='j'+str(i)) ax2.plot(self.z, yn, label='y'+str(i)) ax1.set_ylim(-0.5, 1.1) ax2.set_ylim(-1.625, 0.375) ax1.legend() ax2.legend() plt.savefig('output.pdf') plt.show() result = SphericalBessel(**param_order, **param_range) result.plot()
参考文献
[1]科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化:第2章のロケットシミュレータのコードを参考にしました.[2]オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識:クラスの概念や使い方について,かなりわかりやすく説明されています.