19#include <range/v3/range/conversion.hpp> 
   28    std::vector<double> supporting_points,
 
   31    bool supp_pnts_sorted)
 
   32    : supp_pnts_(std::move(supporting_points)),
 
   33      values_at_supp_pnts_(std::move(values_at_supp_pnts))
 
   35    if (!supp_pnts_sorted)
 
   45        const std::size_t i = std::distance(
supp_pnts_.begin(), it);
 
   47            "Variable {:d} and variable {:d} are the same. Piecewise linear " 
   48            "interpolation is not possible\n",
 
 
   54    std::vector<int> 
const& supporting_points,
 
   55    std::vector<double> 
const& values_at_supp_pnts,
 
   56    bool supp_pnts_sorted)
 
   57    : supp_pnts_(supporting_points | ranges::to<std::vector<double>>()),
 
   58      values_at_supp_pnts_(values_at_supp_pnts)
 
   60    if (!supp_pnts_sorted)
 
   70        const std::size_t i = std::distance(
supp_pnts_.begin(), it);
 
   72            "Variable {:d} and variable {:d} are the same. Piecewise linear " 
   73            "interpolation is not possible\n",
 
 
   93    std::size_t 
const interval_idx = std::distance(
supp_pnts_.begin(), it) - 1;
 
   97    double const x_r = 
supp_pnts_[interval_idx + 1];
 
  104    const double t = (pnt_to_interpolate - x) / (x_r - x);
 
  105    return std::lerp(f, f_r, 
t);
 
 
  109    double const pnt_to_interpolate)
 const 
  111    if (pnt_to_interpolate < 
supp_pnts_.front() ||
 
  118                                    pnt_to_interpolate));
 
  119    std::size_t interval_idx = std::distance(
supp_pnts_.begin(), it);
 
  126    if (interval_idx > 1 && interval_idx < 
supp_pnts_.size() - 2)
 
  129        double const x_ll = 
supp_pnts_[interval_idx - 2];
 
  130        double const x_l = 
supp_pnts_[interval_idx - 1];
 
  132        double const x_r = 
supp_pnts_[interval_idx + 1];
 
  140        double const tangent_right = (f_l - f_r) / (x_l - x_r);
 
  141        double const tangent_left = (f_ll - f) / (x_ll - x);
 
  142        double const w = (pnt_to_interpolate - x) / (x_l - x);
 
  143        return (1. - w) * tangent_right + w * tangent_left;
 
 
Definition of the PiecewiseLinearInterpolation class.
 
std::vector< double > supp_pnts_
 
std::vector< double > values_at_supp_pnts_
 
double getSupportMin() const
 
PiecewiseLinearInterpolation(std::vector< double > supporting_points, std::vector< double > values_at_supp_pnts, bool supp_pnts_sorted=false)
 
double getDerivative(double const pnt_to_interpolate) const
Calculates derivative using quadratic interpolation and central difference quotient.
 
double getSupportMax() const
 
double getValue(double pnt_to_interpolate) const
Calculates the interpolation value.
 
void quicksort(It1 first1, It1 last1, It2 first2, Comparator compare)
 
Definition of the quicksort function.