Fandom

巨大数研究 Wiki

コメント0

exp(1/e)<base≦1.5のテトレーションの連続関数化とその応用

要約

  • \( \text{base} \approx \exp(1/e) \)で通過するのに時間がかかるあたりで速度むらがないこと、という要請を立てて、base=1.5, 1.45, 1.445の3パターンでテトレーションの補間式を作った
  • \( {}^xa \gg a \)の場合に\( {}^{x+1}a = a^{{}^xa} \approx b^{{}^xa} \)である(≫や≈の意味とか後述)、という件を発展させて、\( {}^xa \approx {}^yb \)なら\( {}^{x+c}a \approx {}^{y+c}b \)という要請を立てて、底を振れるようにした
  • \( \text{base} = e \)で某所 と答え合わせをしたら…

補間式

普通の(高さが整数の)テトレーションにより、つなげたい点をいくつかピックアップできる。さて、これをいきなり多項式補間しても振動が激しくなり気持ち悪い。問題の性質からy=a^xの曲線とy=xの間のギャップに比例して値の移動速度が決まるとして\( y=x={}^ta \)と書いて、一番近くなった点を中心に二次まで考慮する(中略)とそこを中心としてtanで近似するのが良さそう。(中略)

以下gnuplot表記

nann(x)=x!=x?1:x>1e308?1:0
uxp(a,x)=nann(x)?NaN:x<=-1?log(uxp(a,x+1))/log(a):x<=0?x+1:exp(uxp(a,x-1)*log(a))
slog(a,y)=nann(y)?NaN:imag(y)!=0?NaN:y<=0?slog(a,exp(y*log(a)))-1:y<=1?y-1:slog(a,log(y)/log(a))+1

base=1.5の場合

filog1p5={2.30600939195002, 1.08198865601437}
tan1p5(x)=imag(filog1p5)*tan(x)+real(filog1p5)
atan1p5(y)=atan((y-real(filog1p5))/imag(filog1p5))
rc1p5(x)=tan1p5( (-atan1p5(uxp(1.5,3))*(x-4)/6+(x-3)*atan1p5(uxp(1.5,4))/2)*(x-5)*(x-6) + (x-3)*(x-4)*(-atan1p5(uxp(1.5,5))*(x-6)/2+(x-5)*atan1p5(uxp(1.5,6))/6) )
rcp1p5(x)=rc1p5(x)*(7-x)/4+exp(rc1p5(x-1)*log(1.5))*(x-3)/4
rf1p5(x)=tan1p5( (+atan1p5(uxp(1.5,3))*(x-4)*(x-5)/24-(x-3)*atan1p5(uxp(1.5,4))*(x-5)/6+(x-3)*(x-4)*atan1p5(uxp(1.5,5))/4)*(x-6)*(x-7) + (x-3)*(x-4)*(x-5)*(-atan1p5(uxp(1.5,6))*(x-7)/6+(x-6)*atan1p5(uxp(1.5,7))/24) )

rc1p5は4点を通る3次関数あてはめ、rf1p5は5点を通る4次関数当てはめである。rcp1p5の説明にはちょっと補題:

関数fに対するラグランジュ補間をp(x_0,x_1,...,x_n,x)と書くことにすると、

p(x_0,...,x_n,x_n+1,x)=(p(x_0,...,x_n,x)*(x_{n+1}-x)+p(x_1,...,x_{n+1},x)*(x-x_0))/(x_{n+1}-x_0)

と再帰的に書くことができる。p(x_1,...,x_{n+1},x)はp(x_0,...,x_n,x)とは異なる式なのでラグランジュ補間の計算が楽になったりはしないが、今回はTransfer functionがあるのでp(x_1,...,x_{n+1},x)に近いものをp(x_0,...,x_n,x)を使って表せる。

というわけでrc1p5を使って5点を通る曲線当てはめを構成したものがrcp1p5である。あくまで近いものであって純粋なラグランジュ補間であるrf1p5とは異なるのだが、今回はこの差がいい方に作用して、rcp1p5のほうが点間の振動が小さくなった。

サンプル点の座標である3,4,5,6,7はrcp1p5やrf1p5の振動が一番抑えられる範囲を手作業で探した結果ここに落ち着いた。

base=1.45の場合

filog1p45={2.67344687219436, 0.379727882243279}tan1p45(x)=imag(filog1p45)*tan(x)+real(filog1p45)
atan1p45(y)=atan((y-real(filog1p45))/imag(filog1p45))
rc1p45(x)=tan1p45( (-atan1p45(uxp(1.45,18))*(x-19)/6+(x-18)*atan1p45(uxp(1.45,19))/2)*(x-20)*(x-21) + (x-18)*(x-19)*(-atan1p45(uxp(1.45,20))/2*(x-21)+(x-20)*atan1p45(uxp(1.45,21))/6) )
rcp1p45(x)=rc1p45(x)*(22-x)/4+exp(rc1p45(x-1)*log(1.45))*(x-18)/4
rf1p45(x)=tan1p45( (+atan1p45(uxp(1.45,17))*(x-18)*(x-19)/24-(x-17)*atan1p45(uxp(1.45,18))*(x-19)/6+(x-17)*(x-18)*atan1p45(uxp(1.45,19))/4)*(x-20)*(x-21) + (x-17)*(x-18)*(x-19)*(-atan1p45(uxp(1.45,20))*(x-21)/6+(x-20)*atan1p45(uxp(1.45,21))/24) )

base=1.445の場合

filog1p445={2.71545293558828, 0.0960181842739075}tan1p445(x)=imag(filog1p445)*tan(x)+real(filog1p445)
atan1p445(y)=atan((y-real(filog1p445))/imag(filog1p445))
rc1p445(x)=tan1p445( (-atan1p445(teta(1.445,84))*(x-85)/6+(x-84)*atan1p445(teta(1.445,85))/2)*(x-86)*(x-87) + (x-84)*(x-85)*(-atan1p445(teta(1.445,86))/2*(x-87)+(x-86)*atan1p445(teta(1.445,87))/6) )
rcp1p445(x)=rc1p445(x)*(88-x)/4+exp(rc1p445(x-1)*log(1.445))*(x-84)/4
rf1p445(x)=tan1p445( (+atan1p445(teta(1.445,84))*(x-85)*(x-86)/24-(x-84)*atan1p445(teta(1.445,85))*(x-86)/6+(x-84)*(x-85)*atan1p445(teta(1.445,86))/4)*(x-87)*(x-88) + (x-84)*(x-85)*(x-86)*(-atan1p445(teta(1.445,87))*(x-88)/6+(x-87)*atan1p445(teta(1.445,88))/24) )

(工事中)

変換式

(工事中)

答え合わせ

(工事中)

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。

Fandomでも見てみる

おまかせWikia