質問: f(t)=at+bsintの逆関数について f(t)=at+bsint a,bは定数、f(t)は単調増加関数とする f(t)=s(定数)となるときのtの値を近似的に求めるよい手段はありますでしょうか。 組み込みプログラムによって実現したいため、"よい"の基準は計算量と近似の正確さのバランスだと考えています。 今のところ、動的計画法を用いた2分探索と線形補完でtの値を求めようと思っていますが、 漠然ともっと計算量が少なくて済む方法があるような気がしています。
回答: f(t)=at+b sin t-s=0__1を解け。a,bは定数、f(t)は単調増加関数とする。 単調増加の条件は|b/a|≦1である。 1を2に変形する。 t+(b/a)sin t-s/a=0__2 2、s/aを2πで割って、tの範囲を限定する。 s/2πaの整数部分をn、端数をyとする。34とする。 s/a=2πn+y__3 t=2πn+x__4 34を2に入れると5になり、式6を得る。 2πn+x+(b/a)sinx-(2πn+y)=0__5 x+(b/a)sinx-y=0__6 6は2と同じ形の方程式だが、yとxが式7の範囲に限定される。 0≦y<2π__7 y=0またはy=πのとき x=0またはx=πが解である。 3,0≦y<πと0≦x<πに限定する。 (1)0≦y<πの場合x=x0,y=y0__8とする。6に入れると x0+(b/a)sinx0-y0=0__9 (2)y=2π-y0、x=2π-x0__10と置く。 y0=2π-y、x0=2π-x0__11になる。10を6に入れると 2π-x0-(b/a)sinx0-(2π-y0)=0__12 x0+(b/a)sinx0-y0=0__13 13はと同じ方程式になるので、同じ方法で解いて、x0を得たら10によりx=2π-x0を得る。 4、第1近似zの計算 9と13を解くためにx0=π/2+z__14と置く。これを9に入れると15となる。 π/2+z+(b/a)sin(π/2+z)-y=0 π/2+z+(b/a)cosz-y=0__15 cosz=1-z2/2__16の近似を行い2次方程式を解く。16を15に入れると17になる。 π/2+z+(b/a)(1-z2/2)-y=0,(a/b)をかけると (a/b)π/2+(a/b)z+1-z2/2-(a/b)y=0 -z2/2+(a/b)z+1+(a/b)(π/2-y)=0__17 -(z-a/b)2/2+(a/b)2/2+1+(a/b)(π/2-y)=0 -(z-a/b)2/2+d/2=0 17の2次方程式を解くと18になる。 z= a/b-√d__18 d=(a/b)2+2+(a/b)(π-2y)__19 18のzから14により、x0を得る。 x0=π/2+z__20 (1)0≦y<πの場合8よりx1=x0__21によりxの第1近似x1を求める。 (2)π