Blame doc/examples/interp_compare.c

Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <stdlib.h>
Packit 67cb25
#include <math.h>
Packit 67cb25
Packit 67cb25
#include <gsl/gsl_math.h>
Packit 67cb25
#include <gsl/gsl_spline.h>
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
main(void)
Packit 67cb25
{
Packit 67cb25
  size_t i;
Packit 67cb25
  const size_t N = 9;
Packit 67cb25
Packit 67cb25
  /* this dataset is taken from
Packit 67cb25
   * J. M. Hyman, Accurate Monotonicity preserving cubic interpolation,
Packit 67cb25
   * SIAM J. Sci. Stat. Comput. 4, 4, 1983. */
Packit 67cb25
  const double x[] = { 7.99, 8.09, 8.19, 8.7, 9.2,
Packit 67cb25
                       10.0, 12.0, 15.0, 20.0 };
Packit 67cb25
  const double y[] = { 0.0, 2.76429e-5, 4.37498e-2,
Packit 67cb25
                       0.169183, 0.469428, 0.943740,
Packit 67cb25
                       0.998636, 0.999919, 0.999994 };
Packit 67cb25
Packit 67cb25
  gsl_interp_accel *acc = gsl_interp_accel_alloc();
Packit 67cb25
  gsl_spline *spline_cubic = gsl_spline_alloc(gsl_interp_cspline, N);
Packit 67cb25
  gsl_spline *spline_akima = gsl_spline_alloc(gsl_interp_akima, N);
Packit 67cb25
  gsl_spline *spline_steffen = gsl_spline_alloc(gsl_interp_steffen, N);
Packit 67cb25
Packit 67cb25
  gsl_spline_init(spline_cubic, x, y, N);
Packit 67cb25
  gsl_spline_init(spline_akima, x, y, N);
Packit 67cb25
  gsl_spline_init(spline_steffen, x, y, N);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < N; ++i)
Packit 67cb25
    printf("%g %g\n", x[i], y[i]);
Packit 67cb25
Packit 67cb25
  printf("\n\n");
Packit 67cb25
Packit 67cb25
  for (i = 0; i <= 100; ++i)
Packit 67cb25
    {
Packit 67cb25
      double xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1];
Packit 67cb25
      double yi_cubic = gsl_spline_eval(spline_cubic, xi, acc);
Packit 67cb25
      double yi_akima = gsl_spline_eval(spline_akima, xi, acc);
Packit 67cb25
      double yi_steffen = gsl_spline_eval(spline_steffen, xi, acc);
Packit 67cb25
Packit 67cb25
      printf("%g %g %g %g\n", xi, yi_cubic, yi_akima, yi_steffen);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  gsl_spline_free(spline_cubic);
Packit 67cb25
  gsl_spline_free(spline_akima);
Packit 67cb25
  gsl_spline_free(spline_steffen);
Packit 67cb25
  gsl_interp_accel_free(acc);
Packit 67cb25
Packit 67cb25
  return 0;
Packit 67cb25
}