Class interp_monotonic (o2scl)¶
-
template<class vec_t, class vec2_t = vec_t>
class o2scl::interp_monotonic : public o2scl::interp_base<vec_t, vec_t>¶ Monotonicity-preserving interpolation.
This class uses a method based on cubic Hermite interpolation, modifying the slopes to guarantee monotonicity. In the notation of [Fritsch80], if
\[ \alpha_i^2+\beta_i^2 \geq 9 \, , \]then \( \alpha \) and \( \beta \) are decreased by the factor \( \tau \) as described at the end of section 4.Warning
This class is experimental. Integrals don’t work yet.
Based on [Fritsch80].
Note
The results of the interpolation will only be monotonic in the regions where the original data set is also monotonic. Also, this interpolation routine does not enforce strict monotonicity, and the results of the interpolation will be flat where the data is also flat.
- Idea for Future:
Convert into fewer loops over the data
Public Functions
-
inline interp_monotonic()¶
-
inline virtual ~interp_monotonic()¶
-
inline virtual void set(size_t size, const vec_t &x, const vec2_t &y)¶
Initialize interpolation routine.
-
inline virtual double eval(double x0) const¶
Give the value of the function \( y(x=x_0) \) .
-
inline virtual double deriv(double x0) const¶
Give the value of the derivative \( y^{\prime}(x=x_0) \) .
-
inline virtual double deriv2(double x0) const¶
Give the value of the second derivative \( y^{\prime \prime}(x=x_0) \).
-
inline virtual double integ(double a, double b) const¶
Give the value of the integral \( \int_a^{b}y(x)~dx \) .
-
inline virtual const char *type() const¶
Return the type,
"interp_monotonic"
.
Protected Attributes
Private Functions
-
interp_monotonic(const interp_monotonic<vec_t, vec2_t>&)¶
-
interp_monotonic<vec_t, vec2_t> &operator=(const interp_monotonic<vec_t, vec2_t>&)¶