■ドミノ・タイリング(その38)

【2】畳の敷き方数の数値計算誤差

 m,nが大きくなるとプログラムの数値計算誤差が顕著になってくる.たとえば単精度で計算した場合,29682.5のような値が出てくるが,これでは29682なのか29683なのか,あるいはもっと違った値になるのか判断できないことになる.

 そこで,K(n×2m)にフィボナッチ数列

  Fn=aFn-1+bFn-2  (2項漸化式)

やトリボナッチ数列

  Tn=aTn-1+bTn-2+cTn-3  (3項漸化式)

のような加法的関係,たとえば,

  K(n×2m)=aK((n−1)×2m)+bK(n×2(m−1))+cK((n−1)×2(m−1))

が成り立てば,K(n×2m)の値を誤差なく求めることができることになる.

 n=1の場合,畳の敷き方はただ1通りであるから,

  K(1×2m)=1

 n=2の場合,

  K(2×2m)=Π(k=1~m){1+4cos^2(kπ/(2m+1))}

であるから,これはF2m(フィボナッチ数列の第2m項)になっていることがわかる.

  F2m=F2m-1+F2m-2

と順次計算することによって

m/n 1 2

6 1 233

7 1 610

8 1 1597

9 1 4181

10 1 10946

が得られる.

 一般に,nが偶数のときには

  K(n×2m)=K(2m×2(n/2))

という関係が成り立つが,これで得られるK(n×2m)はほとんどない.

 n=3,4,・・・の場合はどうだろうか.

  K(3×2m)=Π(k=1~m)Π(l=1~2){4cos^2(lπ/4)+4cos^2(kπ/(2m+1))}

  K(4×2m)=Π(k=1~m)Π(l=1~2){4cos^2(lπ/5)+4cos^2(kπ/(2m+1))}

  K(4×2m)−K(3×2m)=16^mΠ(k=1~m){(cos^2(π/5)cos^2(2π/5)−cos^2(π/4)cos^2(2π/4)−(cos^2(π/5)+cos^2(2π/5)−cos^2(π/4)+cos^2(2π/4)cos^2(kπ/(2m+1))}

となって,期待しているような簡単な加法的関係にはなりそうにない.

  K(5×2m)=Π(k=1~m)Π(l=1~3){4cos^2(lπ/6)+4cos^2(kπ/(2m+1))}

  K(6×2m)=Π(k=1~m)Π(l=1~3){4cos^2(lπ/7)+4cos^2(kπ/(2m+1))}

 K(6×2m)−K(5×2m)ではなおさらである.m=2,3,4,・・・としても同様であるから,この数列は加法的ではなく,本質的に乗積的関係にあるのであろう.

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