SHOGUN
v2.0.0
|
00001 #include <vector> 00002 namespace shogun 00003 { 00004 #ifndef DOXYGEN_SHOULD_SKIP_THIS 00005 class func_base{ 00006 public: 00007 virtual double operator() (double) = 0; 00008 }; 00009 00010 class monicPoly : public func_base { 00011 public: 00012 std::vector<double> coeff; 00013 virtual double operator() (double x); 00014 // constructors: 00015 monicPoly(const size_t degree) 00016 : coeff(degree) {} 00017 monicPoly(const std::vector<double>& v) 00018 : coeff(v) {} 00019 monicPoly(const double* c, size_t degree) 00020 : coeff(std::vector<double>(c, c+degree)) {} 00021 }; 00022 00023 class Poly : public func_base { 00024 public: 00025 std::vector<double> coeff; // a vector of size nterms i.e. 1+degree 00026 virtual double operator() (double x); 00027 // constructors: 00028 Poly(const size_t degree) 00029 : coeff(1+degree) {} 00030 Poly(const std::vector<double>& v) 00031 : coeff(v) {} 00032 Poly(const double* c, size_t degree) 00033 : coeff(std::vector<double>(c, 1+c+degree)) {} 00034 }; 00035 00036 double glomin ( double a, double b, double c, double m, double e, double t, 00037 func_base& f, double &x ); 00038 double local_min ( double a, double b, double t, func_base& f, 00039 double &x ); 00040 double local_min_rc ( double &a, double &b, int &status, double value ); 00041 double r8_abs ( double x ); 00042 double r8_epsilon ( ); 00043 double r8_max ( double x, double y ); 00044 double r8_sign ( double x ); 00045 void timestamp ( ); 00046 double zero ( double a, double b, double t, func_base& f ); 00047 void zero_rc ( double a, double b, double t, double &arg, int &status, 00048 double value ); 00049 00050 // === simple wrapper functions 00051 // === for convenience and/or compatibility 00052 double glomin ( double a, double b, double c, double m, double e, double t, 00053 double f ( double x ), double &x ); 00054 double local_min ( double a, double b, double t, double f ( double x ), 00055 double &x ); 00056 double zero ( double a, double b, double t, double f ( double x ) ); 00057 #endif 00058 }