エルミート多項式
エルミート多項式 (Hermite polynomial) は $g(t,x)=\exp(2tx-t^2)$ を指数型母関数として生成される直交多項式です。すなわち、
\[g(t,x)=\sum_{n=0}^{\infty}H_n(x)\frac{t^n}{n!}\]
と展開したときの係数をエルミート多項式 $H_n(x)$ と定義します。エルミート多項式は以下の漸化式を満たします。
\[\begin{align*}&H_{n+1}(x)=2xH_n(x)-2nH_{n-1}(x)\\[6pt]&H'_n(x)=2nH_{n-1}(x)\\[6pt]&H'_n(x)=2xH_n(x)-H_{n+1}(x)\end{align*}\]
この漸化式を使って $H_n(x)$ の具体的な表式を求めると
\[\begin{align*}H_0(x)&=1\\[6pt]H_1(x)&=2x\\[6pt]H_2(x)&=4x^2-2\\[6pt]H_3(x)&=8x^3-12x\\[6pt]H_4(x)&=16x^4-48x^2+12\end{align*}\]
のようになります。
scipy.special.eval_hermite()
scipy.special.eval_hermite() は任意の点におけるエルミート多項式の値を返します。
scipy.special.eval_hermite(n, x, out=None)
n には多項式の次数、x には配列もしくは配列に相当するオブジェクトを渡します。
# SCIPY_EVAL_HERMITE
# In[1]
import numpy as np
from scipy.special import eval_hermite
# 3次のエルミート多項式のx=0, 1, 2, 3, 4における値を計算
x = np.arange(5)
h = eval_hermite(3, x)
print(h)
[ -0. -4. 40. 180. 464.]
$n=0,\ 1,\ 2,\ 3$ のエルミート多項式のグラフをプロットしてみます。
# In[2]
import matplotlib.pyplot as plt
# x座標データ
x = np.linspace(-4, 4, 129)
# グラフ描画領域を設定
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.set_title("Hermite polynomials", size = 15)
ax.grid()
ax.set_xlim(-4, 4)
ax.set_ylim(-10,10)
ax.set_xlabel("x", size = 14, labelpad = 8)
ax.set_ylabel("Hn(x)", size = 14, labelpad = 8)
# 色のリスト
c = ["red", "blue", "green", "darkorange"]
# H0,H1,H2,H3のグラフを描画
for i in range(4):
ax.plot(x, eval_hermite(i, x),
label = "n = {}".format(i), color = c[i-1])
# 凡例を表示
ax.legend()
plt.show()
scipy.special.hermite()
scipy.special.hermite() は、次数 n を指定して直交多項式オブジェクトを生成する関数です。
4 次のエルミート多項式を作ってみます。
# SCIPY_HERMITE
# In[1]
import numpy as np
from scipy.special import hermite
# 4次のエルミート多項式
h4 = hermite(4)
print(h4)
# 4 2
# 16 x - 48 x - 8.882e-16 x + 12
生成されたインスタンスの正式なクラス名を確認しておきます。
# In[2]
# h4のクラスを表示
print(type(h4))
# <class 'scipy.special.orthogonal.orthopoly1d'>
生成したオブジェクトから、任意の点における値を取得することができます。
# In[3]
# x=[0 1 2 3 4 5]
x = np.arange(0, 6)
# xの各要素におけるh4の値を表示
print(h4(x))
# [12. -20. 76. 876. 3340. 8812.]
各項の係数はインスタンス変数 c に格納されています。
# In[4]
# h4の各項の係数を表示
print(h4.c)
# [1.6000000e+01 0.0000000e+00 -4.8000000e+01 -8.8817842e-16
# 1.2000000e+01]
多項式の根 (方程式 h4=0 の解) を得ることもできます。
# In[5]
# h4の根を表示
print(h4.r)
# [-1.65068012 1.65068012 -0.52464762 0.52464762]
正規化されたエルミート多項式
エルミート多項式に重み関数 $e^{-x^2/2}$ を乗じて、$\sqrt{\sqrt{\pi}2^nn!}$ で割った関数
\[u_n(x)=\frac{1}{\sqrt{\sqrt{\pi}2^nn!}}H_n(x)\exp\left(-\frac{x^2}{2}\right)\]
は正規直交系をなします。すなわち $u_n$ を全区間で積分すると
\[\int_{-\infty}^{\infty}u_m(x)u_n(x)=\delta_{mn}\]
となります ($\delta_{mn}$ は、$m=n$ のときに $1$、それ以外は $0$ の値をとるクロネッカーのデルタ記号です)。$u_n(x)$ は量子力学に登場する1次元調和振動子の固有関数です。
scipy.special.hermitenorm()
scipy.special.hermitenorm() は正規化されたエルミート多項式 $u_n$ を返します。
scipy.special.hermitenorm(n, monic=0)
5 次の正規化されたエルミート多項式を生成してみます。
# SCIPY_HERMITE_NORM
# In[1]
import numpy as np
from scipy.special import hermitenorm
# 正規化された5次のエルミート多項式
u5 = hermitenorm(5)
print(u5)
# 5 3
# 1 x - 10 x + 15 x
u5 の次数、係数、根を調べてみます。
# In[2]
# u5の次数
print("u5の次数\n{}{}".format(u5.order))
# u5の各項の係数
print("\nu5の係数\n{}".format(u5.c))
# u5=0の根
print("\nu5の根\n{}".format(u5.r))
# u5の次数
# 5
# u5の係数
# [1. 0. -10. 0. 15. 0.]
# u5の根
# [-2.85697001 2.85697001 -1.35562618 1.35562618 0.]
正規化されたエルミート多項式のグラフを描いてみます。
# In[3]
import matplotlib.pyplot as plt
# x座標データ
x = np.linspace(-4, 4, 129)
# グラフ描画領域を設定
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.set_title("Normalized Hermite Polynomial", size = 14)
ax.grid()
ax.set_xlim(-4, 4)
ax.set_ylim(-10,10)
ax.set_xlabel("x", size = 14, labelpad = 8)
ax.set_ylabel("un(x)", size = 14, labelpad = 8)
# 色のリスト
c = ["red", "blue", "green", "darkorange"]
# u0,u1,u2,u3のグラフを描画
for i in range(4):
u = hermitenorm(i)
ax.plot(x, u(x),
label = "n = {}".format(i), color = c[i-1])
# 凡例を表示
ax.legend()
plt.show()
AIがエルミート多項式を丁寧に講義します
[ChatGPT] エルミート多項式(Hermite polynomials)は、数学的な特性と応用の両方で重要な役割を果たす特殊な多項式の一種です。これらの多項式は、フランスの数学者であるシャルル・エルミート(Charles Hermite)にちなんで名付けられました。エルミート多項式は、次のような形式の多項式として定義されます:
H_n(x) = (-1)^n e^(x^2) d^n/dx^n (e^(-x^2))
ここで、nは非負の整数であり、d^n/dx^nはxに関するn回微分を表します。エルミート多項式は、次の性質を持っています:
1. 正規直交性: エルミート多項式は、重み関数e^(-x^2)との内積が正規直交条件を満たします。つまり、異なる指数n, mに対して、次の等式が成り立ちます:
∫_{-∞}^{∞} H_n(x) H_m(x) e^(-x^2) dx = 0, (n ≠ m)
∫_{-∞}^{∞} H_n(x) H_m(x) e^(-x^2) dx = 2^n n! sqrt(π), (n = m)
2. 生成関数: エルミート多項式は、生成関数を使用して表すこともできます。次のような形式の生成関数が存在します:
e^(2xt – t^2) = ∑_{n=0}^{∞} H_n(x) t^n / n!
エルミート多項式は、量子力学や統計力学、特に調和振動子や量子調和振動子系などの問題の解析に広く使用されます。また、物理学、数学、工学、統計学などのさまざまな分野で応用されています。エルミート多項式には、多くの性質や公式が存在し、その詳細な研究や特性については数学の専門的な文献や教科書で確認することができます。