8#ifndef model_LagrangeInterpolant_cpp_
9#define model_LagrangeInterpolant_cpp_
29 double LagrangeInterpolant::_f(
const double&
x)
const
35 throw std::runtime_error(
"LinearInterpolant::operator() data is empty.");
46 const auto iterLower(this->lower_bound(
x));
47 const auto iterUpper(this->upper_bound(
x));
49 if(iterUpper==this->begin())
51 return this->begin()->second;
54 else if(iterUpper==this->
end())
56 return std::prev(this->
end())->second;
60 return lagrangePoly(
x);
76 return lagrangePoly(
x);
85 double LagrangeInterpolant::lagrangePoly(
const double&
x)
const
88 for (InterpolantBase::const_iterator iterI=this->begin();iterI!= this->
end();++iterI)
90 temp+=iterI->second*
p(iterI,
x);
95 double LagrangeInterpolant::p(
const InterpolantBase::MapType::const_iterator& iterI,
const double&
x)
const
98 for (InterpolantBase::MapType::const_iterator iterJ=this->begin();iterJ!=this->
end();++iterJ)
102 temp*=(
x-iterJ->first)/(iterI->first-iterJ->first);
Eigen::Matrix< double, Eigen::Dynamic, 2 > MatrixType
InterpolantBase(const MapType &data, const ExtrapolationMethod &extrap)
std::map< double, double > MapType
ExtrapolationMethod extrapolation
LagrangeInterpolant(const InterpolantBase::MatrixType &data, const ExtrapolationMethod &extrap=ExtrapolationMethod())