37 for (
unsigned int i = 0; i < x.size(); ++i)
39 m_vals.push_back(std::make_pair(x[i], y[i]));
41 sort(m_vals.begin(), m_vals.end());
66 double f(
double arg)
const
68 std::pair<double, double> op = std::make_pair(arg, 0.);
69 std::vector< std::pair<double, double> >::const_iterator it = std::lower_bound(m_vals.begin(), m_vals.end(), op);
70 unsigned int ind = distance(m_vals.begin(), it);
72 if (ind == 0)
return m_vals[0].second +
73 (arg - m_vals[0].first) *
74 (m_vals[1].second - m_vals[0].second) / (m_vals[1].first - m_vals[0].first);
76 if (ind == m_vals.size())
return m_vals[ind - 2].second +
77 (arg - m_vals[ind - 2].first) *
78 (m_vals[ind - 1].second - m_vals[ind - 2].second) / (m_vals[ind - 1].first - m_vals[ind - 2].first);
80 return m_vals[ind - 1].second +
81 (arg - m_vals[ind - 1].first) *
82 (m_vals[ind].second - m_vals[ind - 1].second) / (m_vals[ind].first - m_vals[ind - 1].first);
93 double df(
double arg)
const {
95 std::pair<double, double> op = std::make_pair(arg, 0.);
96 std::vector< std::pair<double, double> >::const_iterator it = std::lower_bound(m_vals.begin(), m_vals.end(), op);
97 ind = std::distance(m_vals.begin(), it);
99 return (m_vals[1].second - m_vals[0].second) / (m_vals[1].first - m_vals[0].first);
100 if (ind == m_vals.size())
101 return (m_vals[ind - 1].second - m_vals[ind - 2].second) / (m_vals[ind - 1].first - m_vals[ind - 2].first);
102 return (m_vals[ind].second - m_vals[ind - 1].second) / (m_vals[ind].first - m_vals[ind - 1].first);
144 void fill(std::vector<double> x, std::vector<double> y) {
146 for (
unsigned int i = 0; i < x.size(); ++i)
148 m_vals.push_back(std::make_pair(x[i], y[i]));
150 sort(m_vals.begin(), m_vals.end());