35 #endif // SERIALIZATION
39 namespace interpolation {
55 const std::pair< Real, Real> &FIRSTBE
60 const int dim( RESULTS.
size());
68 const Real delta1( DELTA / 6), delta2( 2 * DELTA / 3);
78 for (
int i( 1); i < dim - 1; ++i ) {
79 coeffs( i, i - 1) = delta1;
80 coeffs( i, i ) = delta2;
81 coeffs( i, i + 1) = delta1;
83 derivs( i) = ( values_( i + 1) - 2 * values_( i) + values_( i-1)) / DELTA;
89 coeffs( dim-1, dim-1) = 1;
94 coeffs( 0, dim - 1) = delta1;
95 coeffs( 0, 0) = delta2;
96 coeffs( 0, 1) = delta1;
97 derivs( 0) = ( values_( 1) - 2 * values_( 0) + values_( dim-1)) / DELTA;
99 coeffs( dim - 1, dim - 2) = delta1;
100 coeffs( dim - 1, dim - 1) = delta2;
101 coeffs( dim - 1, 0) = delta1;
102 derivs( dim - 1) = ( values_( 0) - 2 * values_( dim-1) + values_( dim-2)) / DELTA;
107 coeffs( 0, 0) = -delta2/2;
108 coeffs( 0, 1) = -delta1;
109 derivs( 0) = FIRSTBE.first - ( values_( 1) - values_( 0)) / DELTA;
111 coeffs( dim - 1, dim - 1) = delta2 / 2;
112 coeffs( dim - 1, dim - 2) = delta1;
113 derivs( dim - 1) = FIRSTBE.second - ( values_( dim - 1) - values_( dim - 2)) / DELTA;
117 derivs = coeffs.
inverse() * derivs;
133 int i(
int( floor( ( ARGUMENT -
start_) /
delta_)) + 1);
161 }
else if ( i >= dim ) {
163 const int end( dim - 1);
203 int i(
int( floor( ( ARGUMENT -
start_) /
delta_)) + 1);
231 }
else if ( i >= dim ) {
233 const int end( dim - 1);
268 return std::pair<Real, Real>(
F( ARGUMENT),
dF( ARGUMENT));
285 const Real dxm( 1 - DXP);
286 const Real dx3p( ( DXP * DXP * DXP - DXP) *
sqr(
delta_) / 6);
287 const Real dx3m( ( dxm * dxm * dxm - dxm) *
sqr(
delta_) / 6);
304 const Real dxm( 1 - DXP);
320 template<
class Archive >
322 numeric::interpolation::spline::CubicSpline::save( Archive & arc )
const {
324 arc( CEREAL_NVP(
start_ ) );
325 arc( CEREAL_NVP(
delta_ ) );
331 template<
class Archive >
342 #endif // SERIALIZATION
Real dF(const Real &ARGUMENT) const
return derivative at ARGUMENT
CubicSpline & train(const BorderFlag BORDER, const Real START, const Real DELTA, const MathVector< Real > &RESULTS, const std::pair< Real, Real > &FIRSTBE)
Real F(const Real &ARGUMENT) const
return value at certain ARGUMENT
Real Derivative(const int INDEX_LEFT, const int INDEX_RIGHT, const Real DXP) const
calculate derivative between two cells
Serlialization routines for MathVector.
Real sqr(const Real x) const
utility::keys::lookup::end< KeyType > const end
BorderFlag border_
controls the behavior at x_0 and x_dim-1
Commons serlialization routines.
MathMatrix< T > & inverse()
Real delta_
gives the arguments as a sequence of equidistant points
rosetta project type declarations. Should be kept updated with core/types.hh. This exists because num...
std::pair< Real, Real > FdF(const double &ARGUMENT) const
return value and derivative at ARGUMENT
Size size() const
size of vector
MathVector< Real > dsecox_
second order derivatives
Real Function(const int INDEX_LEFT, const int INDEX_RIGHT, const Real DXP) const
calculate function between two cells
MathVector< Real > values_
f(x)