[VBA] エルミート多項式と1次元調和振動子の固有関数

エルミート多項式

 エルミート多項式 $H_n(x)$ は 2 階常微分方程式
 
\[\frac{d^2y}{dx^2}-2x\frac{dy}{dx}+2ny=0\]
の解であり、母関数によって
 
\[g(t,x)=\sum_{n=0}^{\infty}H_n(x)\frac{t^n}{n!}\]
と表されます。合流型超幾何関数
 
\[F(a,c\:;x)=\sum_{k=0}^{\infty}\frac{(a)_k}{(c)_k}\frac{x^k}{k!}\]
と用いると
 
\[\begin{align*}
H_{2p}(x)&=(-1)^p\frac{(2p)!}{p!}F(-p,1/2\:;x^2)\\[6pt]
H_{2p+1}(x)&=(-1)^p\frac{(2p+1)!}{p!}xF(-p,3/2\:;x^2)\end{align*}\]
と表されることが知られています。具体的な表式は
 
\[\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]\end{align*}\]
のようになります。
 

1次元調和振動子の固有関数

 エルミート多項式に $e^{-x^2/2}$ と定数を乗じた
 
\[u_n(x)=\frac{1}{\sqrt{\sqrt{\pi}2^nn!}}H_n(x)\exp\left(-\frac{x^2}{2}\right)\]
という関数は正規直交系をなします。つまり $-\infty\lt x\lt\infty$ において
 
\[\int_{-\infty}^{\infty}u_m(x)u_n(x)=\delta_{mn}\]
という関係を満たす関数列です。$u_n(x)$ は量子力学における 1次元調和振動子の固有関数 として知られています。

 ≫ [Amazon書籍] 趣味で量子力学
 ≫ [Amazon書籍] 曲がった空間の幾何学

HMT関数(エルミート関数を計算するマクロ)

 エルミート多項式 $H_n(x)$、およびオプションとして調和振動子の固有関数 $u_n(x)$ を計算する Function Macro(ユーザー定義関数)を載せておきます。前回記事の合流型超幾何関数を呼びだすので、ご使用になるかたは VBA 数値計算用最新コード をモジュールに貼りつけてください(この記事のマクロも含まれています)。

'エルミート多項式

 Function HMT(n As Integer, x As Double, _
 Optional unx As Boolean = False) As Double

 Dim sqpi As Double
 Dim k As Double

 sqpi = Sqr(4 * Atn(1))
 nfact = WorksheetFunction.fact(n)

 k = 1 / Sqr((sqpi * 2 ^ n * nfact))

 If n = 0 Then

 HMT = 1

 ElseIf n = 1 Then

 HMT = 2 * x

 ElseIf n Mod 2 = 0 Then

 p = n / 2

 pfact = WorksheetFunction.fact(p)
 pfact2 = WorksheetFunction.fact(2 * p)

 HMT = (-1) ^ p * pfact2 * CHGEO(-p, 0.5, x ^ 2) / pfact

 Else

 p = n \ 2

 pfact = WorksheetFunction.fact(p)
 pfact2 = WorksheetFunction.fact(2 * p + 1)

 HMT = (-1) ^ p * pfact2 * x * CHGEO(-p, 1.5, x ^ 2) / pfact

 End If

 If unx = True Then

 HMT = k * HMT * exp(-x ^ 2 / 2)

 End If

 End Function

 HMT 関数を呼びだすときには n と x,(オプションとして)unx を指定し、

=HMT(n,x[,unx])

と記述します。unx に True (または 1) を指定すると $u_n(x)$ を計算し、False (または 0) を指定すると $H_n(x)$ を計算します。省略した場合は $H_n(x)$ を計算します。たとえば

=HMT(2,3)

と入力すると $H_2(3)$ を計算します。
 

エルミート多項式のグラフ

 HMT 関数を用いて $H_n(x)$ と $u_n(x)$ のグラフを描いてみると、それぞれ次のようになります。

 ExcelVBAエルミート多項式と1次元調和振動子のグラフ
 ≫ VBA 数値計算の技術

スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください