[Ctrl] + [PageDown] 次のシートに移動する
[Ctrl] + [PageUp] 前のシートに移動する
@ エルミート多項式 Hermite polynomial
エルミート多項式 は次のような形で表される多項式です:
[n/2] はガウス記号で n/2 を超えない整数であることを表しています。エルミート多項式は次のような漸化式を満たします:
Hn + 1(x) = 2xHn(x) − 2nHn − 1(x)
具体的に書き表すと、
H0(x) = 1
H1(x) = 2x
H2(x) = 4x2 − 2
H3(x) = 8x3 − 12x
・・・・・・・・・
のような形になります。グラフに描くと下のような形になります:
A エルミート多項式の正規直交化
エルミート多項式 Hn(x) を正規直交化すると次のような関数になります:
un(x) は−∞ < x < ∞ の範囲で直交する関数です:
δmn は m = n のときだけ値 1 をもつという記号(クロネッカーのデルタ)です。 un(x) のグラフを描くと次のようになります:
un(x) は量子力学における1次元調和振動子の固有関数として知られています。古典力学の振り子に相当する現象ですが、量子の世界では n によって振動の状態が決定されます。 n の値はエネルギー En を定めます。 n が大きいほど En が大きく、激しく波打つ関数になります。最もエネルギーの低い u0(x) は振動しているというよりは、x = 0 近辺にとどまっているという状態ですね。
u1(x) で変数 x を x3 に変えてみると・・・・・・
ピークの幅が狭くなりますが、極大値・極小値は変わりません。同じように変数 xn において n を大きくしていけば、ピークはどんどん鋭くなっていきますが、極値そのものが変化するわけではありません。
un(x) は線形微分方程式の解なので、um(x), un(x) を適当に選んで重ね合わせてもやはり微分方程式の解となっています。例として u2(x), u5(x) を足し合わせてみます:
複雑な関数に見えますが、要は axn + ・・・・・・という形の多項式に exp(−x2/2)を掛けただけの比較的単純な関数です。
今回から VBA ユーザー定義関数のプロシージャ(プログラム)を公開することにしました。枠線の中のコードをコピーして標準モジュールに貼りつけると、そのまま使用できます。しばらく後に「ユーザー定義関数コレクション(仮題)」というコーナーがサイドバーに載るようになりますが、本記事のようにユーザー定義関数が載せられている頁はそこに収録されるため、本編のような通し番号が振られません。また現在、全記事の再編集を計画しているために、これまでの記事分類が変更される可能性があります。たとえば、第1種・第2種チェビシェフ多項式は1つの記事にまとめられ、ユーザー定義関数が追加されます。本編のほうは今までと同じような形で更新しますので、リニューアルされる「Excel VBA 数学実験室」を今後ともよろしくお願いいたします。
エルミート多項式 Hn(x) を計算する Functionマクロ
関数名:HERMITE(x,n)
Function HERMITE(x As Double, n As Integer) As Double
Dim k As Integer, s As Integer
Dim c1 As Double, c2 As Double, c3 As Double
Dim sum As Double
s = Int(n / 2)
c1 = WorksheetFunction.Fact(n)
sum = 0
For k = 0 To s
c2 = WorksheetFunction.Fact(k)
c3 = WorksheetFunction.Fact(n - 2 * k)
sum = sum + (-1) ^ k * c1 * (2 * x) ^ (n - 2 * k) / c2 / c3
Next
HERMITE = sum
End Function
Dim k As Integer, s As Integer
Dim c1 As Double, c2 As Double, c3 As Double
Dim sum As Double
s = Int(n / 2)
c1 = WorksheetFunction.Fact(n)
sum = 0
For k = 0 To s
c2 = WorksheetFunction.Fact(k)
c3 = WorksheetFunction.Fact(n - 2 * k)
sum = sum + (-1) ^ k * c1 * (2 * x) ^ (n - 2 * k) / c2 / c3
Next
HERMITE = sum
End Function
引数 x は実数、n は整数(≧0)で指定してください。
正規直交化されたエルミート多項式 un(x)
関数名:UHERMITE(x,n)
Function UHERMITE(x As Double, n As Integer) As Double
Dim k As Integer, s As Integer
Dim c1 As Double, c2 As Double, c3 As Double, c4 As Double
Dim sum As Double
c1 = Sqr(Sqr(WorksheetFunction.Pi()) * 2 ^ n * WorksheetFunction.Fact(n))
c2 = WorksheetFunction.Fact(n)
s = Int(n / 2)
sum = 0
For k = 0 To s
c3 = WorksheetFunction.Fact(k)
c4 = WorksheetFunction.Fact(n - 2 * k)
sum = sum + (-1) ^ k * c2 * (2 * x) ^ (n - 2 * k) / c3 / c4
Next
UHERMITE = sum * EXP(-x ^ 2 / 2) / c1
End Function
Dim k As Integer, s As Integer
Dim c1 As Double, c2 As Double, c3 As Double, c4 As Double
Dim sum As Double
c1 = Sqr(Sqr(WorksheetFunction.Pi()) * 2 ^ n * WorksheetFunction.Fact(n))
c2 = WorksheetFunction.Fact(n)
s = Int(n / 2)
sum = 0
For k = 0 To s
c3 = WorksheetFunction.Fact(k)
c4 = WorksheetFunction.Fact(n - 2 * k)
sum = sum + (-1) ^ k * c2 * (2 * x) ^ (n - 2 * k) / c3 / c4
Next
UHERMITE = sum * EXP(-x ^ 2 / 2) / c1
End Function
引数 x は実数で、n は整数(≧0)で指定してください。