1

ご注文はWZですか?

83
0

あいさつ

んちゃ!
今回は初心に戻り、Gosperのアルゴリズム、WZ法について概要を述べ
Gosperのアルゴリズムにより、面白い級数を手計算で見つけることが出来る場合が無いか調べていきます。
因みに最後にGosperのアルゴリズムに沿って実際にやなさんがC言語でコーディングしたコードが付いてます。
良かったらローカルで使ってみてください。
自分のための復習も含まれます。
それではよろしくお願いいたします。

目次
  1. 前提知識
  2. Gosperのアルゴリズム
  3. WZ法
  4. 手計算できる場合を考えたい
  5. 補遺:実際のコード

表記
  • N0={0}N
  • C[x]C係数多項式全体
  • C(x)={f(x)g(x)|f,gC[x]g(x)0}
  • Hは超幾何項の全体

前提知識

超幾何項(hypergeometric term)

複素数列{hn}nN0Cが以下の性質を持つとき、{hn}nN0を超幾何項(hypergeometric term)と呼ぶ。
hn+1hnC(n)

超幾何項の意味
複素数列{hn}nN0Cが超幾何項だとしましょう。すると定義より、以下の事が成り立ちます。
a1,a2,...,ap,b1,b2,...,bq,zC{0} s.t. hn+1hn=(a1+n)(a2+n)(ap+n)(b1+n)(b2+n)(bq+n)zつまり、この式を用いると超幾何項は下記の様に書き直せます。
hn=h0(a1)n(a2)n(ap)n(b1)n(b2)n(bq)nzn(nN0)この式は、h0=1としてpFq(a1,a2,...,ap;b1,b2,...,bq;z)の第n項と一致する事が分かります。
これが、{hn}nN0が超幾何項と呼ばれる由来となります。
超幾何項の積

超幾何項の積は超幾何項

{hn}nN0,{ln}nN0Hとする。
{f1(n),g1(n)C[n] s.t. hn+1hn=f1(n)g1(n)C(n)f2(n),g2(n)C[n] s.t. ln+1ln=f2(n)g2(n)C(n)
hn+1ln+1hnln=f1(n)f2(n)g1(n)g2(n)C(n)

相似

二つの超幾何項{hn}nN0,{ln}nN0Hとする。この時以下の事が成り立つときhnlnと書き相似と言う。
hnlnC(n)

相似は同値関係を成す。

[1]反射律[2]対称律は略
[3]推移律
超幾何項{hn}nN0,{ln}nN0,{mn}nN0Hが次の性質を持つとしましょう。hnlnlnmn
すると、以下の性質を満たします。
{f1(n),g1(n)C[n] s.t. hnln=f1(n)g1(n)f2(n),g2(n)C[n] s.t. lnmn=f2(n)g2(n)
この式から以下の結論が得られます。ゆえにhnmn
hnmn=hnlnlnmn=f1(n)f2(n)g1(n)g2(n)C(n)

相似な超幾何項の和

二つの超幾何項{hn}nN0,{ln}nN0Hが相似であるとする。
すると、(1){hn+ln}nN0は超幾何項。また、(2)hn,lnhn+ln

{f1(n),g1(n)C[n] s.t. hn+1hn=f1(n)g1(n)C(n)f2(n),g2(n)C[n] s.t. ln+1ln=f2(n)g2(n)C(n)f(n),g(n)C[n] s.t. hnln=f(n)g(n)C(n)
この式を用いると以下の計算ができる。
[(1)]
hn+1+ln+1hn+ln=hn+1hnhnln+ln+1ln1+hnln=f1(n)g1(n)f(n)g(n)+f2(n)g2(n)1+f(n)g(n)=f1(n)g2(n)f(n)+g1(n)f2(n)g(n)g1(n)g2(n)g(n)+g1(n)g2(n)f(n)C(n)
[(2)]
相似は同値関係で、hnlnなので、lnhn+lnのみを示せばよい。
hn+lnln=f(n)+g(n)g(n)C(n)

Gosperのアルゴリズム

では次にGosperのアルゴリズムについて書きます。
Gosperのアルゴリズムを学ぶ事で、与えられた超幾何項の総和問題を機械的に望遠鏡和にする方法を学ぶ事が出来ます。

ピックアップ!
本節の重要な項目に飛ぶことが出来ます。読み返すときにぜひ使ってください。

超幾何項{hn}nN0Hにより定まる下記の数列{sn}nN0も超幾何項。
sn=m=0nhm

超幾何項の定義より以下の式が成り立つ。
f,gC[n] s.t.hn+1hn=f(n)g(n)
[1]p,qN0:hn+phn+q
一般性を損なわないので、p>qとして計算を進める。
hn+phn+q=hn+phn+p1hn+p1hn+p2hn+q+1hn+q=f(n+p1)g(n+p1)f(n+p2)g(n+p2)f(n+q)g(n+q)=F(n)G(n)C(n)
[2][1]よりh1h2hnが分かる。
また帰納的に構成していくことでsn1hnが分かるので、snsn1+hn
ゆえにsnは超幾何項である事が示された。

the first part of Gosper algorithm

超幾何項{hn}nN0Hについて以下の事か成り立つ。
hnhn1=pnpn1qnrn(nN0)
ここで、pn,qn,rnは次の様に定められている。pn,qn,rnC[n]kN0:gcd(qn,rn+k)=1

[1]{hn}nN0は超幾何項なので、以下の式が成り立つ。
f(n),g(n)C[n] s.t. hnhn1=f(n)g(n)
[2]pn(1),qn(1),rn(1)C[n]を用いて以下の様に書けたとします。
{f(n)=pn(1)qn(1)g(n)=pn1(1)rn(1)
この時、ある最小の自然数k1N0が存在して次式が成立したとしましょう。
gcd(qn(1),rn+k1(1))=sn(1)
すると以下の式が成り立つ。
{qn(2)C[n] s.t. qn(1)=sn(1)qn(2)rn(2)C[n] s.t. rn(1)=rn(1)rn+1(1)rn+1(1)rn+2(1)rn+k1(1)rn+k(1)rn+k(1)=sn(1)rn(1)rn+1(1)rn+1(1)rn+2(1)rn+k11(1)rn+k1(1)rn(2)
ゆえに、以下の式が得られる。
f(n)g(n)=pn(1)rn+1(1)rn+2(1)rn+k1(1)pn1(1)rn(1)rn+1(1)rn+k11(1)qn(2)rn(2)
そこでさらに次の様に記号を定めましょう。
pn(2)=pn(1)rn+1(1)rn+2(1)rn+k1(1)
[3]つまり以下の事を繰り返します。
(i)start: pn(1),qn(1),rn(1)C[n]を適当に定め、次式が成り立つ様にする。
{f(n)=pn(1)qn(1)g(n)=pn1(1)rn(1)
(ii)gcd(qn(l),rn+l(l))=sn(l)1を満たす最小の自然数klを求める。
その様な自然数が存在しない場合は(iv)へ進む。
(iii)次の様な更新を行う。
pn(l+1)=rn+1(l)rn+2(l)rn+k1(l)pn(l)
(iv)end:最終的に次の様に置けば、目的が達成される。
{pn=pn(l)qn=qn(l)rn=rn(l)
[4][3]の操作は高々有限回で終了する。
理由は、qn(l)の次数は有限かつ自然数であり、その次数は単調減少であるため。

整数でない複素数に任意の整数を足しても整数でない複素数になる。

[1]虚部が0出なければ明らかなので、虚部が0出ない場合は省略
[2]以下虚部0の場合。つまり実数かつ整数でない場合について本補題が成り立つ事を示す。
過程より、実数かつ整数でない様なものrxZ,y(0,1] s.t. r=x+yと書ける。
[3]ゆえにzZ:r+z=(x+z)+yZが得られる。

モニックな多項式f(n),g(n)C[n]のそれぞれの根をa1,a2,...,ak,b1,b2,...,blとします。
この時、i{1,2,...,k},j{1,2,...,l}:|aibj|N0である場合、以下の式が成り立つ。
NN0:gcd(f(n),g(n+N))=1

与えられた条件より
{f(n)=(na1)(na2)(nak)g(n)=(nb1)(nb2)(nbl)
ゆえに任意の自然数に対して以下の事が成り立つ事が分かる。
g(n+N)={n(b1N)}{n(b2N)}{n(blN)}
そこで、f(n),g(n+N)が互いに素である事と双方が同一の根を持たない事は同値なので、結局i{1,2,...,k},j{1,2,...,l}:|ai+Nbj|0を示せばよい。
仮定より、i{1,2,...,k},j{1,2,...,l}:aibjCZなので補題6よりNN0Z:i{1,2,...,k},j{1,2,...,l}:ai+NbjCZ
これから証明が完了された。

超幾何項{hn}nN0{ln}nN0HnN0:ln+1ln=hnこの時下記の事が成り立つ。

  1. ξnC(n) s.t. ln=ξnhn
  2. hn+1hnξn+1ξn=1
  3. pn,qn,rnC(n) s.t. NN0:gcd(qn,rn+N)=1:hn+1hn=pn+1pnqn+1rn+1が成り立つ事が定理5により分かっている。このpn,qn,rnを用いてξn=rnpnηnの様に置き直せば次の式が得られます。qn+1ηn+1rnηn=pn

[1]
ln+1ln=ln(ln+1ln1)=hn
超幾何項の定義より、ln+1lnC(n)なので、ξn=1ln+1ln1C(n)が成り立つ。
この式を用いると下記の式が得られます。
ξnC(n) s.t. ln=ξnhn
[2]このξnは整理すると以下の式が得られます。
nN0:hn+1hnξn+1ξn=1
[3]定理5より下記の式を得ることが出来る。
pn,qn,rnC[n] s.t.NN0:gcd(qn,rn+N)=1:hnhn1=pnpn1qnrn
また、ξn=rnpnηnの様に置き直すと次式が成り立つ。
hn+1hnξn+1ξn=pn+1pnqn+1rn+1rn+1pn+1ηn+1rnpnηn=qn+1pnηn+1rnpnηn=1
それゆえに、下記の式を得る。
qn+1ηn+1rnηn=pn

ここまでの変形でなぜこのような式変形を行うのだろうと疑問に思った方々もいらっしゃると思います。
その疑問を解消してくれるのが次の定理です。

the second half of Gosper algorithm

数列{ηn}nN0
pn,qn,rnC[n],NN0:gcd(qn,rn+N)=1に対して定まる下記の漸化式を満たしているとする。
qn+1ηn+1rnηn=pn
すると実は、ηnC[n]となる!

ηnが有理関数ではなく多項式になると驚きの定理です。
この定理より、deg(pn)=kであればηn=a=1kAanaの様に置いてA0,A1,...,Akを探せばいいのです。
Gosperさん凄いですよね。

では、この定理を証明しましょう。

まず、ηnC(n)である事は分かりますのでf(n),g(n)C[n] s.t. gcd(f(n),g(n))=1ηn=f(n)g(n)と書けます。
示すべきことは、g(n)=const.です。
[0]g(n)=const.の場合は示す事はありません。
[1]そこでg(n)const.であるとします。するとこれを代入する事で下記の式を得ます。
qn+1f(n+1)g(n)rnf(n)g(n+1)=png(n)g(n+1)
また、明らかにNN0 s.t.gcd(g(n),g(n+N))=u(n)1が成り立ちます(少なくともN=0で成り立つ)から。その様なNの最大のものをNとします。
右辺はg(n+1)の倍数ですから、両辺はu(n+1)で割れます。
つまり次の事が成り立つ事が分かります。
u(n+1)|qn+1
さらに、次の式からu(n+1)|rn+Nが得られます。
qn+N+1f(n+N+1)g(n+N)rn+Nf(n+N)g(n+N+1)=pn+Ng(n+N)g(n+N+1)
しかし矛盾しています。
なぜなら、NN0:gcd(qn,rn+N)=1としたからです。
この矛盾は、g(n)const.とした事から起きました。
ゆえに、g(n)=const.出なければなりません!

上述のGosperのアルゴリズムに従いC言語やpythonなどでコーディングを行い、実行する事でlnを構成出来れば望遠鏡和により命題4のsnは次の様に書ける事が分かります。
sn=ln+1l0

この方程式を解く方法は次の様です。
多項式p=k=0mpkxkに多項式q=k=0nqkxkをかけて出来る多項式r=k=0m+nrkxkとの間には次の式が成り立つ事を用います。
(q00000q1q00000qnq00)(p0p1pn)=(r0r1rm+n)この式を用いて連立方程式を立てればよいです。

WZ法

WZ法とはHerbert WilfとDoron Zeilbergerにより見つけられたものです。
この方法の全貌を見るために次の様な二変数の超幾何項に関する恒等式を考えます。

WZ的組

二つの二変数の超幾何項F(n,k),G(n,k)が次の恒等式を満たす時、WZ的組と呼ぶ。
n,kN0:F(n+1,k)F(n,k)=G(n,k+1)G(n,k)

実はこのWZ的組である事が本質的です。
それでは、核心をつきましょう。

WZ-method

WZ的組F(n,k),G(n,k)kN0:F(0,k)=0を満たし、なおかつkN0:limnF(n,k)=0が成り立つ時以下の式が成り立つ。
kN0:nN0G(n,k)=const.

まずg(k):=nN0G(n,k)と置きましょう。
WZ的組の定義を用いると
F(n+1,k)=n=0nG(n,k+1)n=0nG(n,k)
が成り立つ事が、nについて0からnまで総和を取れば分かります。
ゆえに、nとして下記の式が得られます。
kN0:g(k)=g(k+1)
つまり、g(0)=g(1)==g(k)==const.が得られるので本定理は証明された。

しかし、これだけだとそもそもWZ的組を見つけるにはどうすればいいか分からないのでもう少し踏み込んでみましょう。
まず、多項式Q(n,k),R(n,k)C[n,k]NN:gcd(Q(n,k),R(n+N,k))=1が成り立つ様に定めます。
そして、適当な多項式η(n,k)C(n,k)を定め、次の様にして多項式P(n,k)C(n,k)を作ります。
Q(n+1,k)η(n+1,k)R(n,k)η(n,k)=P(n,k)そして次の計算を行います。
{ξ(n,k)=R(n,k)P(n,k)η(n,k)H(n,k)=P(n,k)Q(n,k)Q(n1,k)Q(1,k)P(0,k)R(n,k)R(n1,k)R(1,k)F(n,k)=ξ(n,k)H(n,k)すると自動的にF(n+1,k)F(n,k)=H(n,k)を満たす超幾何項F(n,k),H(n,k)を構成出来ます。後は、H(n,k)kについてGosperのアルゴリズムに沿って計算を進めG(n,k)を求めH(n,k)=G(n,k+1)G(n,k)を構成すればWZ的組を構成出来る。
H(n,k)は一般的にkについてGosperのアルゴリズムを適用しても解を持たないケースも存在するため、Gを構成できない事もある事に注意。
これから、この分野で研究をする場合は以下の方法を探すのがよさそうです。
  1. GosperアルゴリズムでGを求める事が可能なQ,R,ηを定める方法
  2. Gosperアルゴリズムを使用しないでもGを求める方法

手計算できる場合を考えたい

まずは一番簡単な例で考えます。

和:SN=n=1N2nn2を求めてください。

0.まずはhn=2nn2が超幾何項である事を確認しましょう。
hn+1hn=(n+1)2n221

  1. Gosper変形:しかし、これは既に最初から適切な形になっているので今回は不要。
  2. Gosper方程式を解く:下記の様に記号を定めます。
    {ln=ξn2nn2ξn=1n2ηn2ηn+1ηn=n2
  3. ηn=n2+an+bと置いて計算するとa=4,b=6が成り立つ事が分かります。
    ゆえに、以下の数列が得られます。
    ln=2n(n24n+6)(nN0)
  4. lnを用いると下記の結論が得られる。
    SN=lN+1l1=2N+1(N22N+3)6

以下の三つの多項式について
{pn=3n3+8n2+293n+3qn=3n2rn=n23
次の事に答えよ。
0.NN0:gcd(qn,rn+N)=1が成り立つ事を示してください。
1.qn+1ηnrnηn=pnの解はηn=nである事を証明してください。
2.これから、ξn=rnpnηnとおき、hn+1hn=pn+1pnqn+1rn+1,ln=ξnhnが成り立つ様に数列ln,hnを定めるとln+1ln=hnが成り立っている事を示してください。
ただし、h0=1とします。
3.最後にn=1Nhnを求めてください。

0.qn,rnのそれぞれの根は0,0;23です。という事は、|023|=23N0ですから命題7よりNN0:gcd(qn,rn+N)=1が示された。
1.0.より与えられた方程式はGosper方程式なので解は多項式の形を取る。
そこで、ηn=An+Bの様な形を仮定できます。
代入してA,Bを求めるとA=1,B=0が得られるので証明完了。
2.1.の計算よりξn=n(n23)3n3+8n2+293n+3
また、下記の様に計算できます。
hn=pnqnqn1q1p0rnrn1r1=3n1(3n3+8n2+293n+3)(n!)2(13)n
この計算から、が得られます。
ln=ξnhn=3n1n(n23)(n!)2(13)n
4.最後の和に関しては次の様になります。
n=1Nhn=lN+1l1=3N(N+13)(N+1){(N+1)!}2(13)N+11
つまり、次の様な計算が出来る事を意味しています。
n=1N3n1(3n3+8n2+293n+3)n!(13)n=3N(N+13)(N+1){(N+1)!}2(13)N+11

ここでの計算から分かりますように、NN:gcd(qn,rn+N)=1を満たすqn,rnを先に定めましてそこからηnを決め、その後にpnを求める事で面白い級数の公式を構成できます。
残念ながら、一般の場合Gosperの方程式は解を持つとは限りません。
しかし、この構成法ならいつでも可能です。
でも不満です。だって、この方法だと例えばζ(2)の加速級数すら導出できません。
ではどうすればいいでしょうか?
パラメータの個数を増やします。

次の様な二変数の多項式を考える。
{Q(n,k)=n+k+1R(n,k)=n2k12
この時、次の問題を解いてください。
1.nを主変数とした時、NN:gcd(Q(n,k),R(n+N,k))=1が成り立つ。
2.η(n,k)=n3とおき次の様なP(n,k)を求めよ。
Q(n+1,k)η(n+1,k)R(n,k)η(n,k)=P(n,k)
3.ξ(n,k)=R(n,k)P(n,k)η(n,k)を求めよ。
4.H(n,k)=P(n,k)Q(n,k)Q(n1,k)Q(1,k)P(0,k)R(n,k)R(n1,k)R(1,k)
5.F(n,k)=ξ(n,k)H(n,k)とおくとF(n+1,k)F(n,k)=H(n,k)を満たします。これを用いてn=1N1H(n,k)を計算してください。

1.まず次の様に計算します。
R(n+N,k)=(n+N)2k12=n2k+2Nnk+N2k12
そしてR(n+N,k)Q(n,k)nを主変数として割ります。すると余りは次の様になります。
k3+2(1N)k2+(N1)2k120
ゆえにNN:gcd(Q(n,k))=1を得る。
2.計算するだけです。
Q(n+1,k)η(n+1,k)R(n,k)η(n,k)=(n+k+2)(n+1)3(n2k12)n3=n5k+n4+(k+112)n3+3(k+3)n2+(3k+7)n+k+2
つまり
P(n,k)=n5k+n4+(k+112)n3+3(k+3)n2+(3k+7)n+k+2
3.以降は定義に従って計算しましょう。
ξ(n,k)=R(n,k)P(n,k)η(n,k)=n5k+12n3n5k+n4+(k+112)n3+3(k+3)n2+(3k+7)n+k+2
4.
H(n,k)=P(n,k)Q(n,k)Q(n1,k)Q(1,k)P(0,k)R(n,k)R(n1,k)R(1,k)={n5k+n4+(k+112)n3+3(k+3)n2+(3k+7)n+k+2}(k+2)n(k+2)kn(112k)n(1+12k)n
5.
F(n,k)=ξ(n,k)H(n,k)=(n5k+12n3)(k+2)n(k+2)kn(112k)n(1+12k)n
より
n=1N1H(n,k)=F(N,k)F(1,k)={N5k+12N3}(k+2)N(k+2)kN(112k)N(1+12k)Nk+12k12
この例は次の様な事を意味しています。
n=1N1{n5k+n4+(k+112)n3+3(k+3)n2+(3k+7)n+k+2}(k+2)n(k+2)kn(112k)n(1+12k)n={N5k+12N3}(k+2)N(k+2)kN(112k)N(1+12k)Nk+12k12

上の計算は自信が無いので一応予想でとどめておきます。
因みに、G(n,k)を構成するのは流石に手で計算できる範囲を超えているので省略いたします。(👈不可能かもしれない)

任意の自然数kNに対して以下の式が成り立ちます。
n=1N1{n5k+n4+(k+112)n3+3(k+3)n2+(3k+7)n+k+2}(k+2)n(k+2)kn(112k)n(1+12k)n={N5k+12N3}(k+2)N(k+2)kN(112k)N(1+12k)Nk+12k12

補遺:実際のコード

下記にgosperのアルゴリズムに沿ってコーディングしたファイルがございますので使用してみてください。
配布資料👈クリック
一変数の場合にしか現在は対応していません

投稿日:17日前
更新日:17日前
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. あいさつ
  2. 前提知識
  3. Gosperのアルゴリズム
  4. WZ法
  5. 手計算できる場合を考えたい
  6. 補遺:実際のコード