Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】超幾何関数と楕円積分

超幾何関数

次のように定義される級数のことを超幾何級数とよびます。
1+abcx1!+a(a+1)b(b+1)c(c+1)x22!+=k=0(a)k(b)k(c)kxkk!
ここで (a)k
(a)k=a(a+1)(a+2)
を意味する記号で、k=0 に対しては (a)0=1 と決めておきます。この級数によって定義される関数
F(a,b,c;x)=k=0(a)k(b)k(c)kxkk!
のことを超幾何関数といいます。超幾何関数はとても広いクラスの関数であり、その中に様々な関数を内包しています。たとえば対数関数は
log(1+x)=xF(1,1,2;x)=xx22+x33(1<x1)
のように表され、右辺はよく知られたマクローリン級数展開となっています。また逆三角関数も超幾何関数の1種であることが知られています。たとえば逆正弦関数は
Arcsinx=F(1/2,1/2,3/2;x2)
で表されます。超幾何関数は簡単な形の級数で表されているので、数値計算においてもシンプルで汎用性の高い強力なツールとなります。特に後述する完全楕円積分の計算に威力を発揮します。

超幾何関数を VBA で実装してみましょう。階乗の除算を含む級数の計算においては「巨大な数(階乗)で割るエラー」を防ぐために少し工夫する必要があります。超幾何級数
1+abcx1!+a(a+1)b(b+1)c(c+1)x22!+
においては、第 2 項の係数を
d2=abc
とおくと、第 3 項は
d3=d2(a+1)(b+1)2(c+1)
となり、第 4 項は
d4=d3(a+2)(b+2)3(c+2)
となります。このように1つ1つ計算させていくと、大きな数の割り算は現れにくくなり、より多くの項を計算することができます。以下に超幾何関数を計算する Function Macro(ユーザー定義関数)を載せておきます。なお、当サイトの関数を最大限に活用するため、VBA数値計算用最新コード のページに掲載されたマクロをモジュールに貼りつけることをおすすめします(以下のマクロも含んでいます)。

'[VBA]超幾何関数
Function GHGEO(a As Double, b As Double, c As Double, x As Double) As Double
  Dim k As Integer
  Dim fact As Long
  Dim s As Double
  d = a * b / c
  s = 1 + d * x
  For k = 2 To 100
    d = d * (a + k - 1) * (b + k - 1) / (c + k - 1) / k
    s = s + d * x ^ k
  Next k
  GHGEO = s
End Function

ちなみに、GHGEO は Gaussian Hyper Geometric Function の略です。GHGEO() を使う時は a, b, c, x の 4 つの引数を指定します。

=GHGEO(a,b,c,x)

たとえばワークシートに

=GHGEO(1,1,2,5)

と入力すると F(1,1,2;5) の値が計算されます。c に 0 あるいは負整数を指定した場合にはエラーを返します。

完全楕円積分

次のような積分の形で定義される関数
K(k)=0π/2dθ1k2sinθ(0k1)E(k)=0π/21k2sinθ(0k1)
のことを、それぞれ第1種完全楕円積分第2種完全楕円積分とよびます。この関数は物理学で応用される関数で、K(k) は振り子の周期、E(k) は楕円の周長を計算するときなどに用いられます。完全楕円積分もまた超幾何関数に含まれる関数であり、それぞれ
K(k)=π2F(12,12,1;x2)E(k)=π2F(12,12,1;x2)
と表されます。GHGEO関数を使って完全楕円積分のグラフを描いてみると次のようになります。

第1種および第2種完全楕円積分

エクセルや数学に関するコメントをお寄せください