#/*********************************************************** # cfint.rb -- 連分数補間 #***********************************************************/ N = 5 # 点の数 x = []; y = [] # N 個の点の x 座標, y 座標 def maketable(x, y) # 係数を求め y[] に上書き for j in 0...N for i in (j+1)...N y[i] = (x[i] - x[j]) / (y[i] - y[j]).to_f end end end def interpolate(t, x, y) # 補間 r = y[N - 1] (N - 2).downto(0) {|i| r = (t - x[i]) / r.to_f + y[i]} return r end PI = 3.14159265358979323846264 for i in 0...N x[i] = 20 * i; y[i] = Math::tan(x[i] * PI / 180) end maketable(x, y) 0.step(80, 2) do |i| # 補間 s = interpolate(i, x, y) printf("%2d % .14f % .2e\n",\ i, s, s - Math::tan(i * PI / 180)) end exit 0