1#ifndef CUBIC_SPLINE_INTERPOLATION_H_
2#define CUBIC_SPLINE_INTERPOLATION_H_
296 const double* x_interp,
298 double* dy_interp =
nullptr,
299 double* d2y_interp =
nullptr,
323 double* dy_interp =
nullptr,
324 double* d2y_interp =
nullptr
343 double* dy_interp =
nullptr,
344 double* d2y_interp =
nullptr
366 size_t heap_usage()
const {
return (
x_.capacity() +
y_.capacity()) *
sizeof(double); }
396 std::vector<double>
x_;
399 std::vector<double>
y_;
476 const double* x_interp,
478 double* dy_interp =
nullptr,
479 double* d2y_interp =
nullptr
508 const double* x_interp,
510 double* dy_interp =
nullptr,
511 double* d2y_interp =
nullptr
536 static inline int _index(
int n,
const double* x,
double target);
540 static inline int _index(
int n,
double x0,
double dx,
double target);
544 static inline void _cubic(
570 const double (&u)[2],
575 const double* x_interp
606 static void _solve_cyctri(
int n,
double* d,
double* u,
double* l,
double* b);
Cubic spline interplation.
Definition cubic_spline.h:119
void add(const double *y, const BoundaryCondition &bc_start={}, const BoundaryCondition &bc_end={})
Adds an interpolant that shares the same knots.
Definition cubic_spline.cpp:71
static int _index(int n, const double *x, double target)
Segment index lookup.
Definition cubic_spline.cpp:525
double xmin_
first knot
Definition cubic_spline.h:387
static void _cubic(int n, const double *w, const double *c0, const double *c1, const double *c2, const double *c3, double *y, double *dy, double *d2y)
Evaluates a batch of cubic polynomials.
Definition cubic_spline.cpp:487
CubicSpline(CubicSpline const &)=default
int n_spline_
number of cubic spline interpolants
Definition cubic_spline.h:381
static void _solve_cyctri(int n, double *d, double *u, double *l, double *b)
Solves a cyclic tridiagonal linear system.
Definition cubic_spline.cpp:539
std::vector< double > y_
values and first derivatives at knots
Definition cubic_spline.h:399
size_t heap_usage() const
heap memory usage in bytes
Definition cubic_spline.h:366
int n_spline() const
number of interpolants held by this object
Definition cubic_spline.h:375
void reserve(int n_spline)
Reserves memory for holding more interpolants.
Definition cubic_spline.h:362
static void _build(int n, const double *dx, const double *y, const BoundaryCondition &bc_start, const BoundaryCondition &bc_end, double *dy)
Computational routine for building cubic spline interpolant.
Definition cubic_spline.cpp:372
double xmin() const
first knot
Definition cubic_spline.h:369
double dx_
spacing between knots (only used for evenly-spaced knots)
Definition cubic_spline.h:393
static void build(int n, const double *x, const double *y, const BoundaryCondition &bc_start, const BoundaryCondition &bc_end, double *dy)
Computes the first derivatives at knots for cubic spline interpolation.
Definition cubic_spline.cpp:207
void eval(int n_interp, const double *x_interp, double *y_interp, double *dy_interp=nullptr, double *d2y_interp=nullptr, int i_spline=0) const
Evaluates a single interpolant at multiple places.
Definition cubic_spline.cpp:94
double xmax_
last knot
Definition cubic_spline.h:390
CubicSpline & operator=(CubicSpline const &)=default
void multi_eval(int n_spline, const int *i_spline, double x_interp, double *y_interp, double *dy_interp=nullptr, double *d2y_interp=nullptr) const
Evaluates multiple interpolants at a single place.
Definition cubic_spline.cpp:118
std::vector< double > x_
knots of the spline polynomial (remains empty for evenly-spaced knots)
Definition cubic_spline.h:396
double xmax() const
last knot
Definition cubic_spline.h:372
static void _validate_eval(int n, const double(&u)[2], const double *x, const double *y, const double *dy, int n_interp, const double *x_interp)
Asserts that the input arguments are valid for interpolating a cubic spline.
Definition cubic_spline.cpp:350
static void _validate_build(int n, const double *dx, const double *y, const BoundaryCondition &bc_start, const BoundaryCondition &bc_end)
Asserts that the input arguments are valid for constructing a cubic spline.
Definition cubic_spline.cpp:323
int n_
number of knots
Definition cubic_spline.h:384
CubicSpline & operator=(CubicSpline &&)=default
CubicSpline(CubicSpline &&)=default
BoundaryType
Types of cubic spline boundary conditions.
Definition cubic_spline.h:141
CubicSpline::BoundaryCondition BoundaryCondition
Definition cubic_spline_test.cpp:12
Definition array_pool.h:6
Boundary condition for cubic spline interpolation.
Definition cubic_spline.h:157
BoundaryType type
Definition cubic_spline.h:164
double val
Definition cubic_spline.h:165