2 #include <gsl/gsl_errno.h>
3 #include <gsl/gsl_math.h>
11 const gsl_min_fminimizer_type *T;
12 T = gsl_min_fminimizer_brent;
25 double startx = (upbound - lowbound)/2;
27 int iter = 0, max_iter = 100;
31 gsl_min_fminimizer_set (
fMinimizer, &F, startx, lowbound, upbound);
34 printf (
"%5d [%.7f, %.7f] "
36 iter, lowbound, upbound,
43 status = gsl_min_fminimizer_iterate (
fMinimizer);
46 lowbound = gsl_min_fminimizer_x_lower (
fMinimizer);
47 upbound = gsl_min_fminimizer_x_upper (
fMinimizer);
49 status = gsl_min_test_interval (lowbound,upbound, epsabs, epsrel);
52 if (status == GSL_SUCCESS) printf (
"Converged:\n");
53 printf (
"%5d [%.7f, %.7f] "
55 iter, lowbound, upbound,
59 while (status == GSL_CONTINUE && iter < max_iter);
67 return - (*fCurrentFunction)(x,params);
75 return GetMinimum(minusFunc,minx,maxx,epsabs,epsrel);
#define Q_BEGIN_NAMESPACE
double min(const Diana::QVector &v)
generic C++ interface on static functions
gsl_function GetGSLFunction()
return a gsl function
QRoutinePointer fRoutine
pointer to the underlying static function
double(* QRoutinePointer)(double, double *params)
pointer to function
double GetMaximum(QMathFunction func, double minx, double maxx, double epsabs=0.001, double epsrel=0.0)
get function maximum
gsl_min_fminimizer * fMinimizer
underlying gsl minimizer
static double MinusFunc(double x, double *params)
pointer to mins this function, (to find maximum with the minimum algorithm)
double GetMinimum(QMathFunction func, double minx, double maxx, double epsabs=0.001, double epsrel=0.0)
get function minimum
static QMathFunction::QRoutinePointer fCurrentFunction
pointer to current function being minimized