(元記事 2012/02/05)
#include <gsl/gsl_interp.h>
#include <gsl/gsl_spline.h>gsl_interp_accel *acc = gsl_interp_accel_alloc();
const gsl_interp_type *T = gsl_interp_cspline;
gsl_spline *spline = gsl_spline_alloc(T, data_size);gsl_spline_init(spline, f0, fn, data_size);
i=0;
for(xi = inif[0]; xi < inif[data_size-1]; xi += DELTA){
i++;
yi = gsl_spline_eval(spline, xi, acc);
printf("%.15le %.15le\n", xi, yi);
}
gsl_spline_free(spline);
gsl_interp_accel_free(acc);
補間の方法は他にも選べる。
gsl_interp_linear, gsl_interp_cspline
とか・・・
自分の欲しい結果に合ったものを用いるべし
gsl_spline_init(spline, f0, fn, data_size)
下端f0から上端fnまでdata_size個のデータから補完する
補完元データを読み込ませる
yi = gsl_spline_eval(spline, xi, acc);
これでxiのときの補完した値が得られる
gsl_spline_free(spline);
gsl_interp_accel_free(acc);
全部終わったら解放しておくこと
今自分で書いたコードを読み返してみて色々とまずい気がするなー・・・ボソッ
i=0;
for(xi = inif[0]; xi < inif[data_size-1]; xi += DELTA){
i++;
この辺とか