■格子上の確率論(その6)

 
 Montroll EW (1956): random walks in multidimensional spaces, especially on periodic lattices, J. Soc. Indust. Appl. Math. 4, 241-260
によると
 
  (3次元格子)  配位数    再帰確率
  単純立方格子    6     .340
  対心立方格子    8     .282
  面心立方格子   12     .256
 
ですから,配位数が大きいほど(すなわち移れる点の数が多いほど)再帰しにくくなることが直感的にも理解されます.
 
  (高次元格子)  配位数    再帰確率
  4次元超立方格子  8     .193
  5次元超立方格子 10     .135
  6次元超立方格子 12     .105
  7次元超立方格子 14     .086
 
 配位数8の対心立方格子は4次元超立方格子と,配位数12の面心立方格子は6次元超立方格子と配位数は等しいのですが,いくら配位数が同じであるとはいっても,面心立方格子の再帰確率は4次元超立方格子のそれよりも大きくなります.高次元では高層ビルのような構造になるので,同じ階に戻ることはあっても,なかなか原点までたどり着けないものと直感されます.大切なのは空間の次元であって,再帰性では次元がものをいうことが理解されます.
 
 さて,今回のコラムでは,この論文の前半部分を読みながら考えたことを中心にして述べていくことにします.
 
===================================
 
【1】ランダムウォークの母関数
 
 まず,よく知られている1次元対称単純ランダムウォークの原点復帰の問題について考えることにしましょう.
 
 原点に戻るのはtが偶数の時に限られるので,2nステップのとき,左右に同じ回数nずつ移動する確率は
  u2n=2nCn/2^(2n)
で与えられます.ここでu0=1,また,奇数回目には戻ることができませんからu2n+1=0とします.
 
 ここで,unの母関数を
  U(t)=Σunt^n
とおくと,u2n=2nCn/2^(2n)ですから,この級数の項比は
  u2(n+1)t^2(n+1)/u2nt^2n=(n+1/2)*t^2/(n+1)
これより,級数U(t)は超幾何級数1F0(1/2,t^2)であると同定され,
  U(t)=1F0(1/2,t^2)=(1−t^2)^(-1/2)
であることがわかります.
 
 2項展開からすぐにこの関数を思い浮かべることは困難と思われますが,超幾何関数であると仮定すると上のようにして導き出すことができます.この関数は円周の長さに関係していて
  f(x)=(1-x^2)^(-1/2)
を積分すると,逆正弦関数
  F(x)=arcsin(x)
が得られます.
 
 また,この関数の特性関数は第1種ベッセル関数J0(x)で表されますが,このことはレイリー分布やライス分布との関連から別の機会にあらためて考察することにします.
 
===================================
 
  Σun=U(1)=∞
より1次元酔歩が再帰的であることが導き出されますが,一方,1次元ランダムウォークにおいて,粒子が時刻2nではじめて原点に復帰する確率を求めるのは簡単ではありません.
 
 実は,
  f2n=u2(n-1)/2n
で与えられるのですが,ここではわからないと仮定して,fnの母関数を
  F(t)=Σfnt^n   f0=0,f2n+1=0
とします.
 
 原点に戻って来るには,はじめてどこかで原点に戻って,その後,またn回目に戻ってくればよいので,unとfnの間には両者を結びつける重要な公式
  un=Σfkun-k=fnu0+fn-1u1+・・・+f0un
が導かれます.
 
 ここで,両辺にt^nをかけてnを0〜∞までの和をとれば,左辺からはU(t),右辺からは1+U(t)F(t)が得られますから,このことより
  U(t)=1+U(t)F(t)
すなわち
  F(t)=1−1/U(t)
が成り立ちます.
 
 これより,名目的には
  fn=(-1)^(n+1)1/2Cn     Σfn=F(1)
と表されることがわかりますが,実質的には
  fn=(2n-3)!!/(2^nn!)
ここで,(2n-1)!!=(2n)!(2^nn!)より,
  fn=u2(n-1)/2n   (n≧1)
が導かれます.
 
 ここで,
  fn=u2(n-1)/2n
が第0項から始まるようにパラメータをずらすと,
  an=u2n/2(n+1)   (a0=1/2)
この級数の項比は
  an+1xn+1/anxn=(n+1/2)(n+1)/(n+2)*x^2/(n+1)
ですから,
  a0*2F1(1/2,1/2,2,x^2)=1/2*2F1(1/2,1,2,x^2)
 
 また,f0=0,f1=0より,fnの母関数は
  x^2/2*2F1(0,1/2,1,x^2)=x^2/{1+(1-x^2)^(1/2)}
であると同定されます.
 
 ここで,
  Σfn=F(1)=1
ですから,1次元酔歩は再帰的であることが再確認されたことになります.
 
===================================
 
 次に,2次元ランダムウォークの母関数はどう表されるでしょうか? 同様に,unの母関数を
  U(t)=Σunt^n
とおくと,u2n={2nCn/2^(2n)}^2ですから,この級数の項比は
  u2(n+1)t^2(n+1)/u2nt^2n=(n+1/2)^2/(n+1)*t^2/(n+1)
 
 これより,級数U(t)はガウス型超幾何級数2F1(1/2,1/2,1,t^2)であると同定され,
  U(t)=2F1(1/2,1/2,1,t^2)=2/πK(t)
より第2種楕円積分,すなわち,楕円の周長と関係しているというわけです.
 
 また,
  U(1)=∞
より,2次元酔歩も再帰的であることがわかります.
 
 実は,小生,ある理由から2次元酔歩の母関数が第2種楕円積分になるのではないかと予想しておりました.この予想についても回をあらためて述べることにしたいと思います.
 
 1次元酔歩の再帰確率に関する母関数は
  (1-t^2)^(-1/2)
2次元酔歩では母関数は楕円積分
  2/πK(t)
となりました.それに対して,3次元以上の酔歩の母関数は複雑で求められそうにありません.
 
===================================
 
【2】格子空間におけるフーリエ級数展開
 
 コラム「マーデルング定数」の計算の際にもでてきましたが,格子空間上のフーリエ解析は巧みな方法というよりは,むしろトリックをみせつけられているような気分にさせられるのですが,
 Montroll EW (1956): random walks in multidimensional spaces, especially on periodic lattices, J. Soc. Indust. Appl. Math. 4, 241-260
の(2.11)式はフーリエ解析によって得られたもので,この際,信じることにしましょう.
 
 ともあれ,(2.11)式より(5.1)式
  Σu2n=∫(0,∞)exp(-x){I0(x/d)}^ddx
が得られます.したがって,d次元格子上の再帰確率pdは
  pd=Σf2n=1−1/Σu2n
    =1−[∫(0,∞)exp(-x){I0(x/d)}^ddx]^(-1)
で与えられます.
 
 また,論文には容易であると書かれているのになぜか導き出せない(5.4)式
  pd 〜 1/(2d){1+1/d+7/(4d^2)+35/(8d^3)+215/(16d^4)}
があります.
 
 「容易に・・・」というところが簡単にはいかないのですが,一般の数学の論文・教科書で「容易に」とか「明らかに」と行っている箇所が一番難しいのです.そこで,今は営業でアメリカにいるはずの畏友・阪本氏より解説してもらったことを紹介すると,・・・
 
 『変形ベッセル関数I0(x)のx=0の周りでの級数展開
  I0(x)=0F1(1,x^2/4)=
     =1+x^2/4+x^4/64+x^6/2304+・・・+1/(n!)^2(x/2)^2n+・・・
より,∫(0,∞)exp(-x){I0(x/d)}^ddxをx=0の周りで,たとえば10項まで項別積分すると
  1+3591/32d^9-77175/256d^8+9555/32d^7-8015/64k^6+355/32k^5+15/4k^4+3/2k^3+3/4k^2+1/2k
 
 次に,漸近展開式を求めるために,
  1−[∫(0,∞)exp(-x){I0(x/d)}^ddx]^(-1)
をd=∞の周りで級数展開すれば,
  ・・・+1501/64d^6+215/32d^5+35/16d^4+7/8d^3+1/2d^2+1/2d』
 
 これは論文に一致しています.d≧3のとき,このベッセル関数を展開して項別積分してよいのですが,ここでの議論は級数展開と項別積分の繰り返しとなっています.その際,d=∞の周りで級数展開することに注意します.
 
===================================
 
 さて,以下の表には,
  (1)横浜国大・今野紀雄先生より頂いた資料:
  Peter Griffin(1990): Accelerating beyond the third dimension:
Returning to the origin in simple random walk, Math. Scientist 15, 24-35の数表から,d次元格子上における酔歩の再帰確率pdを引用した値,
  (2)∫(0,∞)exp(-x){I0(x/d)}^ddxをガウス・ラゲール法で数値積分した値→【補】,
  (3)5項までの漸近展開式を使って計算した値
を比較してみたものを掲げます.
 
     d   pd     数値積分      漸近展開
     1   1                 10.78125
     2   1       .531997       .831054
     3   .340537    .300419       .309284
     4   .193201    .188580       .188028
     5   .135178    .134527       .132650
     6   .104715    .104608       .103825
     7   .085844    .085824       .085494
     8   .072912    .072908       .072760
     9   .063447    .063446       .063375
     10  .056197    .056197       .056160
     11  .050455    .050455       .050435
     12  .045789    .045789       .045777
     13  .041919    .041919       .041913
     14  .038657    .038657       .038653
     15  .035869    .035869       .035866
     16  .033458    .033458       .033456
     17  .031352    .031352       .031350
     18  .029496    .029496       .029495
     19  .027848    .027848       .027847
     20  .026375    .026375       .026375
     30  .017257    .017257       .017257
     40  .012827    .012827       .012827
     100  .005050    .005050       .005050
 
 数値積分と漸近展開式の計算結果はほぼ同じですが,d≦4のとき,真の値からのずれが大きいようでした.
 
===================================
 
 (5.1)式にある
  Σu2n=∫(0,∞)exp(-x){I0(x/d)}^ddx
は解析的に求められた式なのですが,真値と食い違うのは数値計算結果が間違いなのではなく,第1種0次の変形ベッセル関数I0の性質が悪いため,小生がとった数値積分法では良い値が求められないのです.
 
 それではどうしたら良い値が得られるのでしょうか? この積分は広義積分であり,Mathematicaによる積分の計算も一筋縄ではいかないようです.実際,数値積分の範囲を∞までにすると,浮動小数点オーバーフロー,アンダイフローを起こしてしまうのです.そのため,積分の範囲を明示的に指定することになりますが,例えば,600000と指定した場合,以下のような計算結果となりました.
 
     d   pd     数値積分      Mathematica
     3   .340537    .300419       .340167
     4   .193201    .188580       .193201
     5   .135178    .134527       .135179
     6   .104715    .104608       .104715
     7   .085844    .085824       .085844
     8   .072912    .072908       .072912
     9   .063447    .063446       .063447
     10  .056197    .056197       .056197
     11  .050455    .050455       .050455
     12  .045789    .045789       .045789
     13  .041919    .041919       .041919
     14  .038657    .038657       .038657
     15  .035869    .035869       .035869
     16  .033458    .033458       .033458
     17  .031352    .031352       .031352
     18  .029496    .029496       .029496
     19  .027848    .027848       .027848
     20  .026375    .026375       .026375
     30  .017257    .017257       .017257
     40  .012827    .012827       .012827
     100  .005050    .005050       .005050
 
 小生はガウス・ラゲール法で数値積分して,関数の性質が悪いため案の定失敗したわけですが,Mathematicaでは内部的にどのような計算方法をとっているのでしょうか? 疑問が残るところです.
 
 Mathematicaでの計算方法については,マニュアルに「インプリメンテーション・ノート」というメモがあるので,これを参照したのですが,それによれば,デフォルトではガウス・ラゲール法を使っている由.その他に初期のサンプルポイントや再帰的な処理の深さ(多分,連分数のネスト)などを指定できるし,デフォルトでは「最適」なものを選択すると書いてありました.それ以上は「企業秘密」なようですが,実に巧妙で微妙なところで商売をしているといえるでしょう.
 
===================================
 
 次に,漸近展開の計算結果を掲げます.漸近展開ですから,級数の項数を増やすより,適当な項数で打ち切った方がよいのですが,級数展開を5項程度で打ち切るのはまずいようです.いずれにせよ,dが小さいとき漸近展開式から正しい値を得るのはあまり容易ではないようでした.
 
d   pd     10項まで   15項まで   20項まで   6項まで
3   .340537    .248187    .305286    .372592    .341456
4   .193201    .169840    .176682    .181899    .190753
5   .135178    .127907    .130576    .132374    .134151
6   .104715    .102050    .103258    .103960    .104327
7   .085844    .084734    .085323    .085616    .085693
8   .072912    .072399    .072706    .072836    .072850
9   .063447    .063189    .063358    .063419    .063419
10  .056197    .056058    .056155    .056186    .056184
11  .050455    .050375    .050434    .050450    .050448
12  .045789    .045741    .045778    .045787    .045785
13  .041919    .041890    .041913    .041918    .041917
14  .038657    .038638    .038654    .038657    .038656
15  .035869    .035856    .035867    .035869    .035868
16  .033458    .033449    .033457    .033458    .033457
17  .031352    .031346    .031351    .031352    .031351
18  .029496    .029491    .029495    .029496    .029496
19  .027848    .027845    .027848    .027848    .027848
20  .026375    .026373    .026375    .026375    .026375
 
 dが大きいところの計算を正確に行うために必要になるのが「漸近展開」です.ここでは最初の10項・15項・20項・6項をとって計算していますが,漸近展開の性質上,この値が大きいからといって正確になるとは限らず,dを固定して項数n→∞とすれば,この級数は発散してしまいます.しかし,dが十分大きいとき,漸近展開項の絶対値は最初は減少しますから,漸近展開には最適打ち切り項数が存在するはずです.
 
 たとえば,級数
  g(z)=Σ(-1)^k(2k-1)!!/{2^(k+1)z^(2k+1)}
の第n項までの部分和をSn(z),打ち切り誤差をEn(z)で表すとすると,
  |En(z)|≦(2n-1)!!/{2^(n+1)z^(2n+1)}
 
 ここで,En(z)とEn+1(z)の比をとって
  |En(z)/En+1(z)|=2z^2/(2n+1)
したがって,2n+1>2z^2ならば|En(z)|<|En+1(z)|,2n+1<2z^2ならば|En(z)|>|En+1(z)|であり,結局,2n+1=2z^2が誤差の上限を最小にします.すなわち,最適打ち切り項数nの値はzによって決まり,n=|z|^2のとき,その項の絶対値は最小になるのです.また,
  (2n-1)!!/2^(n+1)=(2n)!/n!/2^(2n+1)
ここで,スターリングの公式
  n!=(2π)^(1/2)n^(n+1/2)exp(-n)
により,
  (2n)!/n!/2^(2n+1)=n^nexp(-n)/2^(1/2)
ですから,n=|z|^2のとき,誤差の上限の近似値は
  n^nexp(-n)/{2^(1/2)z^(2n+1)}=exp(-n)/√(2n)
で計算されることがわかります.たとえば,n=|z|^2=20のとき,最初の20項をとって数値計算すれば,ほぼ3.2*10^(-10)なると試算されますから,かなりよい近似値を得ることができます.
 
 このように,漸近展開では第n項まで求めれば最適かという問題は,一般項がわかれば計算できます.d=∞の周りで級数展開することさえわかれば,手計算でも数項ならば求めることは難しいことではないと思います.しかし,学生時代に比べ計算する力が鈍っているので,手計算では{I0(x/k)}^kの展開のところで断念,残念ながら,小生には一般項を求めることはできませんでした.一般項さえ求められれば,かなりよい近似値が得られるはずなのですが,・・・.
 
===================================
 
【補】変形ベッセル関数
 
  I0(x)=0F1(1,x^2/4)
     =exp(-x)1F1(1/2,1,2x)
 
1000 '
1010 ' *** 数値積分による再帰確率の計算 ***
1020 '
1030 DEFDBL A-H,J-Z
1040 DIM T#(16),W#(16)
1050 '
1060 FOR I=3 TO 20
1070 D=I
1080 DD=D*2
1090 GOSUB *GAUSS.LAGUERRE
1100 PRINT
1110 PRINT D
1120 PRINT 1#-1#/SS#
1130 PRINT 1/DD*(1+2/DD+7/DD^2+35/DD^3+215/DD^4)
1140 NEXT I
1150 END
1160 '
1170 ' *** ガウス・ラゲール則 ***
1180 '
1190 *GAUSS.LAGUERRE:' [16 point]
1200 'DIM T#(16),W#(16)
1210 T#(1)=.08764941047892784#
1220 T#(2)=.4626963289150808#
1230 T#(3)=1.141057774831227#
1240 T#(4)=2.129283645098381#
1250 T#(5)=3.437086633893207#
1260 T#(6)=5.078018614549768#
1270 T#(7)=7.070338535048234#
1280 T#(8)=9.438314336391939#
1290 T#(9)=12.21422336886616#
1300 T#(10)=15.44152736878162#
1310 T#(11)=19.18015685675313#
1320 T#(12)=23.51590569399191#
1330 T#(13)=28.57872974288214#
1340 T#(14)=34.58339870228662#
1350 T#(15)=41.94045264768833#
1360 T#(16)=51.70116033954332#
1370 '
1380 W#(1)=.206151714957801#
1390 W#(2)=.3310578549508842#
1400 W#(3)=.2657957776442142#
1410 W#(4)=.1362969342963775#
1420 W#(5)=.04732892869412522#
1430 W#(6)=.01129990008033945#
1440 W#(7)=1.849070943526311D-03
1450 W#(8)=2.042719153082785D-04
1460 W#(9)=1.48445868739813D-05
1470 W#(10)=6.828319330871199D-07
1480 W#(11)=1.881024841079673D-08
1490 W#(12)=2.862350242973882D-10
1500 W#(13)=2.127079033224103D-12
1510 W#(14)=6.297967002517868D-15
1520 W#(15)=5.050473700035513D-18
1530 W#(16)=4.161462370372855D-22
1540 '
1550 NZ=16
1560 SS#=0
1570 ID=1
1580 WHILE ID<=NZ
1590 U#=T#(ID):GOSUB *BESSEL.I0
1600 SS#=SS#+W#(ID)*F#
1610 ID=ID+1
1620 WEND
1630 RETURN
1640 '
1650 ' ** 変形ベッセル関数 **
1660 '
1670 *BESSEL.I0:
1680 A0=.5:C0=1
1690 A=A0:C=C0
1700 Z=U#/D*2:GOSUB *CONFLUENT.HGF :G1#=G#
1710 F#=(G1#*EXP(-U#/D))^D
1720 RETURN
1730 '
1740 ' *** 合流型超幾何関数 ***
1750 '
1760 *CONFLUENT.HGF:' [Kummer]
1770 EPSL=1E-09
1780 G0#=0:G#=1
1790 T#=1:K=1
1800 WHILE ABS(G0#-G#)>EPSL
1810  T#=T#*A/C*Z/K
1820  G0#=G#
1830  G#=G#+T#
1840  K=K+1
1850  A=A+1
1860  C=C+1
1870 WEND
1880 G=G#
1890 RETURN
 
===================================