00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #ifndef QVFUNCTIONMINIMIZER_H
00026 #define QVFUNCTIONMINIMIZER_H
00027
00028 #include <qvmath/qvvector.h>
00029 #include <qvmath/qvmath.h>
00030 #include <gsl/gsl_errno.h>
00031 #include <gsl/gsl_math.h>
00032 #include <gsl/gsl_min.h>
00033
00074 class QVFunctionMinimizer
00075 {
00076 private:
00077 int iterations;
00078 bool useGoldenSection;
00079 double actual, minimum, maximum;
00080
00081 static double static_function (const double v, void *functionMinimizerPtr);
00082
00083 public:
00088 QVFunctionMinimizer(const bool useGoldenSection = true):
00089 useGoldenSection(useGoldenSection), actual(0), minimum(-1), maximum(1) { }
00090
00097 virtual double function(const double value) = 0;
00098
00106 void setStartingValue(const double value) { actual = value; }
00107
00114 void setSearchRange(const double min, const double max ) { minimum = min; maximum = max; }
00115
00123 const double & getMinimum() const { return actual; }
00124
00132 const int & getIterations() const { return iterations; }
00133
00143 bool iterate(const int maxIterations = 100, const double maxError = 0.00001);
00144 };
00145
00146 #endif
00147