ラグランジュ補間の計算
ラグランジュ補間のコード書いてみた。
3つの点(x,y)=(1,10),(2,15),(10,55)のときに、x=4での値を求める。
example.rb
require "Lagrange.rb" lag = Lagrange.new([[1,10],[2,15],[10,55]]) y = lag.calc(4) puts y
$ ruby example.rb 25.0
元の3つの点は関数y=5x+5の値だったりするので、f(4)=5*4+5=25で結果と一致。
sin関数で試したところ若干の誤差*1は出たけど、かなり近い値になった。
Lagrange.rb
class Lagrange def initialize(array=[]) @array = array end def calc(x) y = 0.0 @array.each_with_index do |i,count| a = 1.0 b = 1.0 @array.each_with_index do |j,count_| if count != count_ then a *= (x - j[0]) b *= (i[0] - j[0]) end end y += (i[1] * (a / b)) end return y end end
Lagrange#calc(x)
xに対するyの値を返す。
*1:0.03くらい