■球面上の最近接距離分布(その3)

 これまでのところで球面上の最近接距離分布が求まったわけであるから,コラム「無限次元空間の球充填問題」で述べた方法を拡張すれば,球面上のrandom packing,coveringの問題を取り上げることもできると思われるが,その前にこれまで出てきた計算法を整理しておきたい.

===================================

【1】ベータ関数の漸化式

  Β(p,q)=∫(0,∞)u^(q-1)/(1+u)^(p+q)du

の形でu^(q-1)を積分し,1/(1+u)^(p+q)を微分する部分積分を施すと

  Β(p,q)=u^q)/q(1+u)^(p+q)|(0,∞)+(p+q)/q∫(0,∞)u^q/(1+u)^(p+q+1)du

 =(p+q)/qΒ(p,q+1)

したがって,

  Β(p,q+1)=q/(p+q)Β(p,q)

 同様に

  Β(p+1,q)=p/(p+q)Β(p,q)

を得る.特に,

  B(1,1)=1,B(1/2,1/2)=π,B(1,1/2)=2

===================================

【2】不完全ベータ関数比の漸化式

  Ix(p,q)=∫(0,x)t^(p-1)(1-t)^(1-q)dt/B(p,q)

  U(p,q)=t^p(1-t)^q/B(p,q)

とおくと,ベータ分布の分布関数の値は次の再帰的関係式により計算できる.

  Ix(p+1,q)=Ix(p,q)−U(p,q)/p

  Ix(p,q+1)=Ix(p,q)+U(p,q)/q

  U(p+1,q)=U(p,q)t(p+q)/p

  U(p,q+1)=U(p,q)(1-t)(p+q)/p

 その際,計算のための初期値は

  Ix(1/2,1/2)=1-2/πarctan((1-t)/t)^(1/2)

  Ix(1/2,1)=t^(1/2)

  Ix(1,1/2)=1-(1-t)^(1/2)

  Ix(1,1)=t

  U(1/2,1/2)=1/π(t(1-t))^(1/2)

  U(1/2,1)=1/2t^(1/2)(1-t)

  U(1,1/2)=1/2t(1-t)^(1/2)

  U(1,1)=t(1-t)

となる.

 また,次の漸化式も有効である.

  Ix(p,q)=xIx(p-1,q)+(1-x)Ix(p,q-1)

  (p+q)Ix(p,q)=pIx(p+1,q)+qIx(p,q+1)

  Ix(p,q)=Ix(p,q-1)+t^p(1-t)^(q-1)/B(p,q)(p+q-1)

  Ix(p,q)=Ix(p-1,q)−t^(p-1)(1-t)^q/B(p,q)(p+q-1)

===================================

【3】ガウスの超幾何関数の漸化式

 ベータ分布の確率密度関数は

  f(x)=x^(p-1)(1−x)^(q-1)/Β(p,q)

であるが,その分布関数は不完全ベータ関数と密接に関係していて,ガウスの超幾何関数2F1を使って以下のように表現される.

  F(x)=1/px^p2F1(p,1-q,p+1,x)/Β(p,q)

      =1/px^p(1−x)^q2F1(p+q,1,p+1,x)/Β(p,q)

 ガウスの超幾何関数の三項漸化式(隣接関係)としては多くのものが知られているが,当該の計算ではp=1/2,q=(n-1)/2であり2F1(n/2,1,3/2,x)の値が必要になるから,次の三項漸化式が有効であると思われる.

  (a-b)(1-x)2F1(a,b,c,x)+(c-a)2F1(a-1,b,c,x)+(b-c)2F1(a,b-1,c,x)=0

とくにb=1のとき,2F1(a,b-1,c,x)=1であるから

  (a-1)(1-x)2F1(a,1,c,x)+(c-a)2F1(a-1,1,c,x)+(1-c)=0

  2F1(a,1,c,x)={(a-c)2F1(a-1,1,c,x)+(c-1)}/(a-1)(1-x)

 また,2F1(a,1,c,x)は連分数展開式もよく知られていて,たとえば,

  [参]一松信「特殊関数入門」森北出版

が利用できる.超幾何関数のベキ級数展開はマクローリン展開と同じものであるから,収束が遅く収束半径なども問題になる.しかし,一般的にいって連分数展開の精度はベキ級数展開に及ばない.(その2)に掲げたプログラムはベキ級数展開では収束の様子を探りながら繰り返しを続けるか,打ち切るかを決めていたが,収束状況の判定時間が惜しいので,連分数展開ではあらかじめ何回繰り返せば許容誤差をみたすかどうかを調べておき,無条件にその回数だけ繰り返している.

 なお,初期値は

  2F1(1,1,3/2,x^2)=arcsin(x)/{x√(1-x^2)}

  2F1(1/2,1,3/2,x^2)=arctanh(x)/x

とするが,とくにx=cosθのとき

  2F1(1,1,3/2,(cosθ)^2)=(π-2θ)/sin(2θ)

  2F1(1/2,1,3/2,(cosθ)^2)=log(cot(θ/2))

となる.

===================================