スプライン補完


ruby-gslでspline

離散的なデータの間の値を補完しようとしたのだが、関数でfittingすると非常に複雑なものになりそうだったので、スプライン曲線で補完することにした。

スプライン曲線を計算して書こうとすると、意外に難しいらしい。GSLでできるのでは無いかと思って調べてみたら、やはりできた。というわけで、ruby-gslでspline補完するために書いたプログラムがこれ。

require "gsl"
data=[
[2.0144,7.8956747],
[109.2747,0.9246663],
[216.3775,0.6455773],
[319.6925,0.3726170],
].sort_by{|t,v| v}.transpose
ya=NArray.to_na(data[0])
xa=NArray.to_na(data[1])
spline = GSL::Spline.alloc("cspline",xa,ya)
puts spline.eval(4.5)

xaは小さい方から大きい方に単調になっていけないようなので、sortが必要だったが、あっさり動いた。さすがruby。