Python
数値計算
物理
科学技術計算
計算物理学

[Pythonによる科学・技術計算]scipy利用による物理学で使われる(特殊)関数の利用法リスト

More than 1 year has passed since last update.

はじめに

scipy.specialパッケージで物理学分野に出てくる(特殊)関数を利用できる[1]。

from scipy.special import *

Pythonを用いた科学・技術計算を行う際に適宜参照できるよう,代表的な(特殊)関数の利用法(関数名や引数など)を以下にまとめておく。
なお,オプションに関する詳しい説明は公式ページ[1]を参照されたい。
特殊関数の定義については参考文献[2]にわかりやすく記述されており参考になる。

本稿は必要に応じて加筆・修正する予定である。

● 2017 8月7日: 第一種および第二種完全楕円積分を追加した。


エルミート(Hermite)多項式

$H_n(x)=n!\sum_{m=0}^{\lfloor n / 2 \rfloor}\dfrac{(-1)^m(2x)^{n-2m}}{m!(n-2m)!}$
($\lfloor \rfloor$はガウス記号である)

物理学における応用例:量子力学における定常状態のシュレディンガー方程式に対する線形復元力ポテンシャルに対する固有解[3],など。

#利用法
from scipy.special import *
eval_hermite(n, x)

ルジャンドル(Legendre)多項式

$\begin{align} P_n(x) = 2^n\cdot \sum_{k=0}^n x^k {n \choose k}{\frac{n+k-1}2\choose n}\end{align}$

物理学における応用例: ラプラス方程式[4],三次元中心力場のシュレディンガー方程式[4],電磁気学における多重極展開[4]などで現れる。

#利用法
eval_legendre(n, x)

ルジャンドル陪多項式 (Associated Legendre polynomials)

$P_n{}^m (t) =
{1\over 2^n} (1-t^2)^{m \over 2}
\sum_{j=1}^{\lfloor (n-m) / 2\rfloor}
{(-1)^j (2n-2j)! \over j!(n-j)!(n-2j-m)!}t^{n-2j-m}$
($n\leq m$, $\ $$|t|\leq 1$)

物理学における応用例:ラプラス方程式の解, 球面調和関数の表現

#利用法
lpmv(m, n, t)

ラゲール(Laguerre)多項式

$L_n(x) = \sum_{k=0}^n (-1)^k {n \choose k} \frac{n!}{k!} x^k $

物理学における応用例:クーロンポテンシャル下における動径方向のシュレディンガー方程式の解[4]。

#利用法
eval_laguerre(n, x)

球面調和関数(Spherical harmonics)

${{Y_{l}^{m}(\theta, \phi)
=(-1)^{(m+|m|)/2}\sqrt{ \frac{2l+1}{4\pi}\frac{(l-|m|)!}{(l+|m|)!} \,}
\,P_l^{|m|}(\cos\theta)\,e^{im\phi}}}$

ここで $l\geq |m|$, $P_l^{|m|}$はルジャンドル陪多項式。

物理学における応用例:球対称ポテンシャルに対する1粒子定常状態のシュレディンガー方程式を変数分離した際に現れる[3]。また,角度方向に対して完全系をなすため,角度依存性を持つ関数の展開基底としてしばしば用いられる。

#利用法
sph_harm(m, l, theta, phi)

ガンマ(Gamma)関数

$\Gamma(z)=\int^{\infty}_{0}t^{z-1}e^{-t}\,dt\qquad$ $(Re(z)>0)$

物理学における応用例: 統計力学でしばしば現れる。自由フェルミ電子系の比熱式[3,5], スターリングの公式の導出(Γ関数の漸近展開)[5],など。

#利用法
gamma(z)

ポリガンマ(Polygamma)関数

ガンマ関数の対数微分,
$\psi^{(n)}(z)
= \frac{d^{n+1}}{dz^{n+1}} \ln{\Gamma(z)} = \frac{d^n}{dz^n} \psi(z) $
をポリガンマ関数という。しばしば使われる。

#利用法
polygamma(n, x)

ベータ(Beta)関数

${\beta(x,y) = \int_0^1t^{x-1}(1-t)^{y-1}\,dt} =\frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)}$
(ここでx, yは$Re \ x > 0, Re\ y>0$ を満たす複素数である)

#利用法
beta(x, y)

ベッセル(Bessel)関数:

物理学における応用例:ラプラス方程式[5],ヘルムホルツ方程式を柱座標系または極座標系で解く際に現れる[4]。電磁波の伝播,円柱物体の熱伝導,薄い膜の振動解[6]など。

第1種ベッセル関数

#利用法
jn(n, z) # 整数次ベッセル関数
jv(v, z) #一般次数のベッセル関数 

第2種ベッセル関数

#利用法
yn(n,x) # 整数次
yv(v,z) #一般次数

ハンケル(Hankel)関数:

ベッセルの微分方程式に対する特殊解

#利用法
hankel1(v, z) # 第一種ハンケル関数

変形ベッセル(Modified Bessel)関数

純虚数変数に対するベッセルの微分方程式の特殊解。

#利用法
kn(n,x) #整数次
kv(v,z) #一般次数

球ベッセル(Spherical Bessel)関数

$J_n(z)$

物理学における応用例: 球座標系における自由粒子のシュレディンガー方程式の正則な解(非正則解は球ノイマン関数である)[3],など。

#利用法
spherical_jn(n, z, derivative=False)

エアリー(Airy )関数

$\begin{align} \operatorname{Ai}(x)
& = \frac{1}{\pi}\int_0^\infty\cos(\tfrac{t^3}{3} + xt)\mathit{dt}\
\equiv \frac{1}{\pi}\lim_{b\to\infty} \int_0^b \cos(\tfrac{t^3}{3} + xt)\mathit{dt}\end{align}$

物理学における応用例:量子力学におけるWKB法[3]による古典的回帰点をつなぐ解,など。

#利用法
airy(z)

マシュー(Mathieu)関数 (楕円柱関数)

物理学における応用例:楕円形膜の振動[6],強制振動におけるパラメータ励起[6], 三角関数型のポテンシャルに対する定常状態のシュレディンガー方程式の解[3],一般相対性理論におけるアインシュタイン方程式の平面波解の表現,など。

#利用法
mathieu_a(m, q) #マシュー余弦関数
mathieu_b(m, q) #マシュー正弦関数


完全楕円積分 (Complete elliptic integral)

物理学における応用例:大振幅の振り子の運動[6],統計力学での2次元イジングモデルの厳密解などにあらわれる。

第一種完全楕円積分

${K(k)=\int_0^{\pi/2}{\frac{1}{\sqrt{1-k^2\sin^2\theta}}}d\theta}$
$m=k^2<1$として,

#利用法: ellipk(m)

a=ellipk(0.45)
print(a)

結果: 1.81388393682

第二種完全楕円積分

${E(k)=\int_0^{\pi/2}{\sqrt{1-k^2\sin^2\theta}}d\theta}$

$m=k^2 \le 1$として,

#利用法: ellipe(m)
a=ellipe(0.9)
print(a)

結果: 1.1047747327


参考文献

[1] Scipy公式: Special functions

[2] 小野寺 嘉孝 著,物理のための応用数学, 裳華房, (1988); 寺沢寛一 著, 自然科学者のための数学概論, 岩波書店, (1983); 犬井鉄郎 著, 特殊函数, 岩波書店, (1962).

[3] ランダウ・リフシッツ 著, 量子力学,東京図書, (1983); 後藤憲一 他編, 量子力学演習, 共立出版, (1982).

[4] 砂川重信 著, 理論電磁気学 第三版, 紀伊國屋書店,(1999).

[5] 久保亮五 編, 大学演習 熱学・統計力学, 修訂版, 裳華房, (1998).

[6] 戸田盛和 著, 振動論, 培風館, (1968).