00001 #include "fbsinverse.h" 00002 00003 BSInverse::BSInverse(Function1D &f, double a, double b, double Tol):_f(f) 00004 { 00005 _a=a; 00006 _b=b; 00007 assert(_a < _b); 00008 _Tol=Tol; 00009 } 00010 00011 double BSInverse::operator()(double y, unsigned cmp=0) const 00012 { 00013 assert(isInDomain(y,cmp)); 00014 double y_M, x_M; 00015 double x_L = _a; 00016 double x_R = _b; 00017 double diff = x_R-x_L; 00018 while (diff > _Tol) 00019 { 00020 x_M = 0.5*(x_L + x_R); 00021 y_M = _f(x_M); 00022 if (y <= y_M) x_L = x_M; 00023 else x_R = x_M; 00024 diff = x_R-x_L; 00025 } 00026 return x_M; 00027 } 00028 00029 BSInverse::~BSInverse(){}