8#ifndef model_LinearInterpolant_cpp_
9#define model_LinearInterpolant_cpp_
29 double LinearInterpolant::_f(
const double&
x)
const
35 throw std::runtime_error(
"LinearInterpolant::operator() data is empty.");
42 return this->begin()->second;
49 const auto iterLower(this->lower_bound(
x));
50 const auto iterUpper(this->upper_bound(
x));
52 if(iterUpper==this->begin())
58 return this->begin()->second;
67 return linearSegment(exMap.begin(),std::next(exMap.begin()),
x);
73 return linearSegment(this->begin(),std::next(this->begin()),
x);
78 else if(iterUpper==this->
end())
84 return std::prev(this->
end())->second;
93 return linearSegment(std::prev(exMap.end(),2),std::prev(exMap.end(),1),
x);
99 return linearSegment(std::prev(this->
end(),2),std::prev(this->
end(),1),
x);
106 if(iterLower==iterUpper)
110 return linearSegment(std::prev(iterLower),iterLower,
x);
114 return iterLower->second;
122 double LinearInterpolant::linearSegment(
const InterpolantBase::MapType::const_iterator& iter1,
const InterpolantBase::MapType::const_iterator& iter2,
const double&
x)
124 return iter1->second+(iter2->second-iter1->second)/(iter2->first-iter1->first)*(
x-iter1->first);
Eigen::Matrix< double, Eigen::Dynamic, 2 > MatrixType
InterpolantBase(const MapType &data, const ExtrapolationMethod &extrap)
std::map< double, double > MapType
ExtrapolationMethod extrapolation
LinearInterpolant(const InterpolantBase::MatrixType &data, const ExtrapolationMethod &extrap=ExtrapolationMethod())