16#ifndef OPALX_GSL_SPLINE_H
17#define OPALX_GSL_SPLINE_H
58 spline->
init(std::vector<double>{x, x + n}, std::vector<double>{y, y + n});
67 return spline->
eval(x, *accel);
double gsl_spline_eval_integ(const gsl_spline *spline, const double xa, const double xb, gsl_interp_accel *accel)
Evaluate the integral of a spline at x using an accelerator.
void gsl_interp_accel_reset(gsl_interp_accel *accel)
Reset an accelerator to the initial state.
constexpr int gsl_interp_cspline
double gsl_spline_eval(const gsl_spline *spline, const double x, gsl_interp_accel *accel)
Evaluate a spline at x using an accelerator.
gsl_interp_accel * gsl_interp_accel_alloc()
Allocate an interpolation accelerator.
void gsl_spline_init(gsl_spline *spline, const double *x, const double *y, const size_t n)
Initialize a spline with tabulated data.
void gsl_spline_free(const gsl_spline *spline)
Free a spline instance.
void gsl_interp_accel_free(const gsl_interp_accel *accel)
Free an accelerator instance.
gsl_spline * gsl_spline_alloc(const int type, size_t)
Allocate a spline instance (size ignored).
constexpr int gsl_interp_linear
GSL linear interpolation type identifiers.
Accelerator caching last interval indices.
Base class for the linear and cubic interpolation spline classes.
virtual double eval(double x, Accelerator &accel) const =0
Evaluate the spline at x using an accelerator.
virtual void init(const std::vector< double > &x, const std::vector< double > &y)
Initialize from tabulated data (natural spline).
virtual double evalIntegral(double xa, double xb, Accelerator &accel) const =0
Evaluate the integral of the spline at x.
Natural cubic spline interpolator.