13 #ifndef HEX_INTERPOLATE
14 #define HEX_INTERPOLATE
18 #include <gsl/gsl_interp.h>
41 for (
size_t i = 0; i < x.
size(); i++)
46 if (right == x0.
end() or right == x0.
begin())
53 double x0_left = *(right - 1);
54 double x0_right = *right;
55 T y0_left = y0[right - 1 - x0.
begin()];
56 T y0_right = y0[right - x0.
begin()];
59 y[i] = (y0_left * (x0_right - x[i]) + y0_right * (x[i] - x0_left)) / (x0_right - x0_left);
108 gsl_interp *itp = gsl_interp_alloc (interpolation, x0.
size());
110 gsl_interp_accel *accel = gsl_interp_accel_alloc ();
114 for (
size_t i = 0; i < x.
size(); i++)
117 if (x0.
front() <= x[i] and x[i] <= x0.
back())
118 y[i] = gsl_interp_eval (itp, x0.
data(), y0.
data(), x[i], accel);
124 gsl_interp_accel_free (accel);
125 gsl_interp_free (itp);
virtual T * data()
Data pointer.
Definition: arrays.h:757
T const * const_iterator
Definition: arrays.h:611
T & front(int i=0)
Definition: arrays.h:777
A comfortable number array class.
Definition: arrays.h:171
T & back(int i=0)
Definition: arrays.h:779
iterator end()
Definition: arrays.h:774
iterator begin()
Definition: arrays.h:771
NumberArray< double > rArray
Definition: arrays.h:1609
rArray interpolate_real(rArray const &x0, rArray const &y0, rArray const &x, const gsl_interp_type *interpolation)
Return values interpolated by O₂scl.
Definition: interpolate.h:97
NumberArray< T > interpolate(rArray const &x0, NumberArray< T > const &y0, rArray const &x)
Return linearly interpolated values.
Definition: interpolate.h:30
size_t size() const
Item count.
Definition: arrays.h:673