アフィリエイト広告を利用しています

2015年12月01日

Excel VBA エルミート多項式 Hermite polynomial

【Excelショートカット豆知識】
 [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
    ・・・・・・・・・

のような形になります。グラフに描くと下のような形になります:

 エルミート多項式.png

A エルミート多項式の正規直交化


 エルミート多項式 Hn(x) を正規直交化すると次のような関数になります:

エルミート多項式の正規直交化

 un(x) は−∞ < x < ∞ の範囲で直交する関数です:

エルミート多項式の直交関係
 
 δmn は m = n のときだけ値 1 をもつという記号(クロネッカーのデルタ)です。 un(x) のグラフを描くと次のようになります:

 Uエルミート.png

 un(x) は量子力学における1次元調和振動子の固有関数として知られています。古典力学の振り子に相当する現象ですが、量子の世界では n によって振動の状態が決定されます。 n の値はエネルギー En を定めます。 n が大きいほど En が大きく、激しく波打つ関数になります。最もエネルギーの低い u0(x) は振動しているというよりは、x = 0 近辺にとどまっているという状態ですね。

 u1(x) で変数 x を x3 に変えてみると・・・・・・

 エルミートu(x^3).png

 ピークの幅が狭くなりますが、極大値・極小値は変わりません。同じように変数 xn において n を大きくしていけば、ピークはどんどん鋭くなっていきますが、極値そのものが変化するわけではありません。

 un(x) は線形微分方程式の解なので、um(x), un(x) を適当に選んで重ね合わせてもやはり微分方程式の解となっています。例として u2(x), u5(x) を足し合わせてみます:

 エルミートu2+u5.png

 複雑な関数に見えますが、要は 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

 引数 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

 引数 x は実数で、n は整数(≧0)で指定してください。
   
posted by Blog Cat at 06:58 | Comment(0) | TrackBack(0) | n次関数
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/4462439
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
検索
Excel VBA 数学教室
数学問題集(解答付き)
下剋上算数
ベクトル解析
サッカーマティクス
Excelで学ぶ統計解析
和算的思考力
学び直し
整数論の理論と演習
大人が手こずる算数
東大生の知恵袋
フーリエ変換
インド式秒算術
Excelで学ぶ微分積分
Excel 数学シミュレーション
オイラーの贈物


ファン
最新記事
カテゴリーアーカイブ