合流型超幾何関数
次の級数で定義される関数をKummer の合流型超幾何関数(Confluent hypergeometric function)といいます。
ERF.PRECISE
指数関数やエルミート多項式、ベッセル関数などを包括する広いクラスの関数です(たとえば
VBA 数値計算用最新マクロをモジュールに貼り付ける(あるいは上書きする)と、この記事にあるマクロも含めて当サイトに載っている主要な関数を全て利用することができます。ぜひお試しください。
合流型超幾何級数を計算する Function Macro(ユーザー定義関数)です。
'[VBA]合流型超幾何級数
Function CHGEO(a As Double, c As Double, x As Double) As Double
Dim d As Double
Dim s As Double
d = a * x / c
s = 1 + d
For k = 1 To 200
d = d * x * (a + k) / (c + k) / (k + 1)
s = s + d
Next k
CHGEO = s
End Function
この関数を呼びだすときには、
=CHGEO(a,c,x)
というように記述します。たとえば
=CHGEO(1,1,2)
と入力すると
複素変数の合流型超幾何関数
一般には複素変数の合流型超幾何関数が用いられます。
複素変数の合流型超幾何関数の実装は次のようになります。
'[VBA]複素変数の合流超幾何関数
Function CXCHGEO(a As Double, c As Double, z As Complex) As Complex
Dim d As Double
Dim k As Double
Dim s As Complex
Dim zk As Complex
d = a / c
s.re = 1 + d * z.re
s.im = d * z.im
zk = z
For k = 2 To 100
d = d * (a + k - 1) / (c + k - 1) / k
zk = CPXCLC(zk, z, 3)
s.re = s.re + d * zk.re
s.im = s.im + d * zk.im
Next k
CXCHGEO = s
End Function
変数 z は複素数型 (Complex型) を指定します。CXCHGEO関数を使って、
を数値計算してみましょう。
'[VBA](1+i)^kの計算
Sub CXCHGEO_TEST()
Dim fz As Complex
fz = CXCHGEO(1, 1, CPX(1, 1))
Debug.Print fz.re & " + " & fz.im & "i"
End Sub
'1.46869393991589 + 2.28735528717884i
ラゲール陪多項式
合流型超幾何関数には、量子力学において水素原子の波動関数を記述するときに用いられるラゲール陪多項式が含まれています。ラゲール陪多項式は母関数によって
と定義されています。つまり
と表されます。特に
それぞれ微分すると
これをさらに繰り返し微分していくと、ラゲール陪多項式
ラゲール陪多項式のマクロ
ラゲール陪多項式を計算するマクロは以下のようになります。
'[VBA]ラゲール陪多項式
Function LAG(n As Integer, k As Integer, x As Double)
nfact = WorksheetFunction.fact(n)
kfact = WorksheetFunction.fact(k)
nkfact = WorksheetFunction.fact(n - k)
LAG = (-1) ^ k * nfact ^ 2 * CHGEO(k - n, k + 1, x) / kfact / nkfact
End Function
このユーザー定義関数は
=LAG(n,k,x)
の形で呼びだします。たとえば
=LAG(2,1,3)
と入力すると
エクセルや数学に関するコメントをお寄せください
この関数を呼びだすときには、
=CGHEO(a,c,x)
は
=CHGEO(a,c,x)の間違いでは。
=CGHEO(1,1,2)も。
ラゲール多項式で検索していて、このページを見つけました。
VBAでグラフが書けるので、多項式の特徴を知るのに助かります。
御指摘の通り、正しくは
=CHGEO(a,c,x)
です。記事は訂正しておきました。申し訳ありませんでした。