pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

Python(SymPy)で学ぶ合流型超幾何関数

数学の具体的な計算にPython(SymPy)を使って、数学もPython(SymPy)も同時に学んでしまいましょう。今回はPython(SymPy)を使って合流型超幾何関数について解説してみたいと思います。



合流型超幾何関数

合流型超幾何関数はいくつかの特殊関数(および初等関数)を一般化した関数といえます。物理の問題にもたびたび出てくるLaguerre(ラゲール)多項式などは、合流型超幾何関数のパラメタを特殊な値にとった場合として含まれます。

指数関数

超幾何関数は冪級数展開によって定義されるので、まずはじめに、初等関数である指数関数の冪級数展開についておさらいしておきましょう。指数関数の冪級数展開(Taylor展開)は以下で与えられます。

 \qquad\displaystyle{e^x=\sum_{n=0}^\infty \frac{x^n}{n!} }

この級数  e^x=\sum_{n=0}^\infty t_n の各項の比は

\qquad \displaystyle{ \frac{t_{n+1}}{t_n}=\frac{x}{n+1} }

で与えられます。これを一般化して、各項の比に、 n の1次分数式を掛けて定義される関数が次の合流型超幾何関数です。

定義

合流型超幾何関数  F(a,c;x)=\sum_{n=0}^\infty t_n は、各項の比が

\qquad \displaystyle{ \frac{t_{n+1}}{t_n}=\frac{a+n}{c+n}\,\frac{x}{n+1} }

で与えられる冪級数です。ただし  t_0=1 として正規化しておきます。定義から  a=c の場合には指数関数に一致します。

\qquad \displaystyle{ F(a,a;x)=e^x }

低次の項をいくつか具体的に書いてみると

\qquad \displaystyle{ F(a,c;x)=1+\frac{a}{c}\,\frac{x}{1!}+\frac{a(a+1)}{c(c+1)}\,\frac{x^2}{2!}+\frac{a(a+1)(a+2)}{c(c+1)(c+2)}\,\frac{x^3}{3!}+\cdots }

となります。

ポッホハマー記号

ここで合流型超幾何関数の冪級数の展開係数を簡潔に記すために

\qquad \displaystyle{ (a)_{n}=a(a+1)(a+2)\cdots(a+n-1) }

という記号を導入しましょう。この記号はポッホハマー記号(Pochhammer symbol)として知られています。 n=0 の場合には

\qquad \displaystyle{ (a)_{0}=1 }

と定義し、漸化式

\qquad \displaystyle{ (a)_{n+1}=(a+n)\,(a)_{n} }

が成り立ち、とくに

\qquad \displaystyle{ (1)_{n}=(n-1)! }

です。またパラメタ  a自然数  k の場合には、階乗の比

\qquad \displaystyle{ (k)_{n}=\frac{(k+n-1)!}{(k-1)!} }

で表せます。一般の場合には、階乗の一般化であるガンマ関数について

\qquad \displaystyle{ \frac{\Gamma(a+1)}{\Gamma(a)}=a }

が成り立つことを使って

\qquad \displaystyle{ (a)_{n}=\frac{\Gamma(a+n)}{\Gamma(a)} }

となります。さて、このポッホハマー記号を使うと合流型超幾何関数は

\qquad \displaystyle{ F(a,c;x)=\sum_{n=0}^\infty \frac{(a)_n}{(c)_n}\,\frac{x^n}{n!} }

と表されます。

漸化式

ポッホハマー記号について公式

\qquad \displaystyle{ (a)_{n+1}=a\,(a+1)_n }

が成り立ちます。また

\qquad \displaystyle{ \frac{(c)_{n}}{c+n-1}=\frac{(c-1)_n}{c-1} }

そして

\qquad \displaystyle{ \frac{(a)_{n+1}}{(c)_{n+1}}-\frac{(a)_{n}}{(c)_{n}}=(a-c)\frac{(a)_{n}}{(c)_{n+1}} }

が成り立ちます。もちろんポッホハマー記号の定義式からこれらの公式を示すこともできますが、SymPyにもポッホハマー記号は組み込まれており、公式の成立をチェックすることができます。

from sympy import *

a, c, n = var('a, c, n')

simplify(rf(a,n+1)-a*rf(a+1,n))    # ポッホハマー記号 (a)_n はSymPyでは rf(a,n) です。
simplify(rf(c,n)/(c+n-1)-rf(c-1,n)/(c-1))
simplify(rf(a,n+1)/rf(c,n+1)-rf(a,n)/rf(c,n)-(a-c)*rf(a,n)/rf(c,n+1))

 

これらの公式を用いると、合流型超幾何関数の導関数

\qquad \displaystyle{ \frac{d}{dx}F(a,c;x)=\sum_{n=1}^\infty \frac{(a)_n}{(c)_n}\,\frac{x^{n-1}}{(n-1)!}=\sum_{n=0}^\infty \frac{(a)_{n+1}}{(c)_{n+1}}\,\frac{x^n}{n!} }

について以下の関係式が示されます。まず

\qquad \displaystyle{\begin{aligned} \left(\frac{d}{dx}-1\right)F(a,c;x)&=\sum_{n=0}^\infty \left(\frac{(a)_{n+1}}{(c)_{n+1}}-\frac{(a)_{n}}{(c)_{n}}\right)\frac{x^n}{n!}\\ &=\sum_{n=0}^\infty (a-c)\frac{(a)_{n}}{(c)_{n+1}}\frac{x^n}{n!}\\ &=\sum_{n=0}^\infty \frac{a-c}{c}\frac{(a)_{n}}{(c+1)_n}\frac{x^n}{n!}= \frac{a-c}{c}\,F(a,c+1;x) \end{aligned}}

が成り立ちます。また

\qquad \displaystyle{\begin{aligned} \left(x\frac{d}{dx}+a\right)F(a,c;x)&=a+\sum_{n=1}^\infty \frac{(a)_n}{(c)_n}\,\left(\frac{1}{(n-1)!}+\frac{a}{n!}\right)x^{n}\\ &=\sum_{n=0}^\infty \frac{(a+n)\,(a)_n}{(c)_n} \frac{x^n}{n!}\\ &=\sum_{n=0}^\infty \frac{a\,(a+1)_n}{(c)_n} \frac{x^n}{n!}=aF(a+1,c;x) \end{aligned}}

です。同様にして

\qquad \displaystyle{\begin{aligned} \left(x\frac{d}{dx}+c-1\right)F(a,c;x)&=\sum_{n=0}^\infty \frac{(a)_n}{\frac{1}{c+n-1}\,(c)_n} \frac{x^n}{n!}\\ &=\sum_{n=0}^\infty \frac{(a)_n}{\frac{1}{c-1}\,(c-1)_n} \frac{x^n}{n!}=(c-1)F(a,c-1;x) \end{aligned}}

を得ます。

Kummerの微分方程式

合流型超幾何関数の導関数に関する漸化式の第3式の両辺に  (d/dx-1) を作用してみると、第1式を用いて

\qquad \displaystyle{\begin{aligned} \left(\frac{d}{dx}-1\right)\left(x\frac{d}{dx}+c-1\right)F(a,c;x)&=(c-1)\left(\frac{d}{dx}-1\right)F(a,c-1;x)\\&=(c-1)\,\frac{a-c+1}{c-1}\,F(a,c;x)\\&=(a-c+1)\,F(a,c;x) \end{aligned}}

両辺整理すると、合流型超幾何関数  F(a,c;x) はKummer(クンマー)の微分方程式

 \qquad\displaystyle{xy''+(c-x)\,y'-ay=0}

の解になっていることがわかります。級数展開の各次数で微分方程式が成り立っていることをSymPyで確かめてみます。

from sympy import *

a, c, x = var('a, c, x')
y = hyper([a],[c],x)    # F(a,c,x) はSymPyでは hyper([a],[c],x) が対応します。

simplify(series( x*diff(y,x,2)+(c-x)*diff(y,x,1)-a*y, x))


 


さて、微分方程式は2階線形なので、合流型超幾何関数の他に線型独立な解があるはずです。そこで  x=0 付近での関数形が

\qquad \displaystyle{y=x^\lambda\left(1+\sum_{n=1}^\infty A_nx^n\right)}

となると仮設してみます。微分方程式に代入すると

\qquad \displaystyle{\left\{\lambda(\lambda-1)+c\lambda\right\}x^{\lambda-1}(1+\mathcal{O}(x))=0}

であり、 x=0 付近での振る舞いをみるためには  x の高次の項が無視できることから、指数  \lambda

\qquad \displaystyle{\lambda=0, \ 1-c}

と決定できます。 \lambda=0 の場合が合流型超幾何関数です。そこで

\qquad \displaystyle{y=x^{1-c}\eta}

と仮設し、微分方程式に代入してみます。少し計算して整理すると  \eta が再びKummerの微分方程式

\qquad \displaystyle{x\eta''+(2-c-x)\,\eta'-(a-c+1)\eta=0}

を満たしていることがわかります。いま  \eta y x=0 での振る舞いの指数を抜き出したものだったので、 x=0 付近で  \eta=x^0 であり、正規化したとすれば結局

\qquad \displaystyle{\eta=F(a-c+1,2-c;x)}

で与えられることがわかります。すなわち、Kummerの微分方程式  xy''+(c-x)\,y'-ay=0 の一般解は

\qquad \displaystyle{y_1=F(a,c;x),\qquad y_2=\ x^{1-c}F(a-c+1,2-c;x)}

の線型結合で与えられます。

Laguerre多項式との関係

最後に、合流型超幾何関数とLaguerre(ラゲール)多項式との関係について述べて、この記事を終わりにします。Laguerre多項式  L_n(x) は、母関数によって

 \qquad\displaystyle{\frac{1}{1-t}\exp\left(-\frac{xt}{1-t}\right)=\sum_{n=0}^\infty L_n(x)\,t^n}

で与えられる有限次数の多項式であり、Laguerreの微分方程式

 \qquad\displaystyle{xy''+(1-x)\,y'+ny=0}

の解です。Laguerreの微分方程式とKummerの微分方程式を見比べると、前者は後者のパラメタを  a=-n,\ c=1 にとった特別な場合に他ならないことがわかります。そのうえこの特殊値では、 (-n)_{n+1}=0であることから対応する超幾何関数は有限の  n多項式になり、またKummerの2階微分方程式でパラメタ  a,\ c を一般の値にとった場合には線型独立だった解が一致して退化してしまうことがわかります。これらのことからも、Kummerの微分方程式の特殊な場合のなかでもLaguerreの微分方程式がいかに特別なものであるかが納得できるかと思います。さてこのときに対応する超幾何関数の具体形を調べてみましょう。

series(hyper([0],[1],x), x, 0, 10)
series(hyper([-1],[1],x), x, 0, 10)
series(hyper([-2],[1],x), x, 0, 10)
series(hyper([-3],[1],x), x, 0, 10)

より

\qquad \displaystyle{\begin{aligned} F(0,1,x)&=1 \\ F(-1,1,x)&=1-x \\ F(-2,1,x)&=1-2x+\frac{x^2}{2} \\ F(-3,1,x)&=1-3x+\frac{3}{2}x^2-\frac{1}{6}x^3 \\  \end{aligned}}

です。他方、Laguerre多項式

laguerre(0, x)
laguerre(1, x)
laguerre(2, x)
laguerre(3, x)

より

\qquad \displaystyle{\begin{aligned} L_0(x)&=1 \\ L_1(x)&=1-x \\ L_2(x)&=1-2x+\frac{x^2}{2} \\ L_3(x)&=1-3x+\frac{3}{2}x^2-\frac{1}{6}x^3 \\  \end{aligned}}

ですから、結局

 \qquad\displaystyle{F(-n,1,x)=L_n(x)}

がわかります。

 



キーワードPython、SymPy、超幾何関数

プライバシーポリシー