#ifndef SPLINEFUNCTION_H #define SPLINEFUNCTION_H #include #include #include using namespace std; class SplineFunction { public: vector< pair > vals; SplineFunction() { vals.resize(0); } SplineFunction(vector x, vector y) { for(int i=0;i op = make_pair(arg, 0.); vector< pair >::const_iterator it = lower_bound(vals.begin(), vals.end(), op); ind = distance(vals.begin(), it); /*while (ind=vals[ind].first) { if (fabs(vals[ind].first-arg)<1e-10) return vals[ind].second; ind++; }*/ if (ind==0) return vals[0].second + (arg - vals[0].first) * (vals[1].second - vals[0].second) / (vals[1].first - vals[0].first); if (ind==vals.size()) return vals[ind-2].second + (arg - vals[ind-2].first) * (vals[ind-1].second - vals[ind-2].second) / (vals[ind-1].first - vals[ind-2].first); return vals[ind-1].second + (arg - vals[ind-1].first) * (vals[ind].second - vals[ind-1].second) / (vals[ind].first - vals[ind-1].first); } double fsquare(double arg) { double ret = f(arg); return ret*ret; } void clear() { vals.resize(2); vals[0].first = 0.; vals[0].second = 0.; vals[1].first = 1.; vals[1].second = 0.; } void clearall() { vals.resize(0); } void fill(vector x, vector y) { vals.resize(0); for(int i=0;i