Class min_base (o2scl)

O2scl : Class List

template<class func_t = funct, class dfunc_t = func_t>
class min_base

One-dimensional minimization [abstract base].

Subclassed by o2scl::min_bkt_base< funct >, o2scl::min_bkt_base< func_t, dfunc_t >, o2scl::min_de_base< func_t, dfunc_t >

Public Functions

inline min_base()
inline virtual ~min_base()
inline virtual int print_iter(double x, double y, int iter, double value = 0.0, double limit = 0.0, std::string comment = "")

Print out iteration information.

Depending on the value of the variable verbose, this prints out the iteration information. If verbose=0, then no information is printed, while if verbose>1, then after each iteration, the present values of x and y are output to std::cout along with the iteration number. If verbose>=2 then each iteration waits for a character.

virtual int min(double &x, double &fmin, func_t &func) = 0

Calculate the minimum min of func w.r.t ‘x’.

If this is not overloaded, it attempts to bracket the minimum using bracket() and then calls min_bkt() with the newly bracketed minimum.

virtual int min_bkt(double &x2, double x1, double x3, double &fmin, func_t &func) = 0

Calculate the minimum min of func with x2 bracketed between x1 and x3.

If this is not overloaded, it ignores the bracket and calls min().

virtual int min_de(double &x, double &fmin, func_t &func, dfunc_t &df) = 0

Calculate the minimum min of func with derivative dfunc w.r.t ‘x’.

If this is not overloaded, it attempts to bracket the minimum using bracket() and then calls min_bkt_de() with the newly bracketed minimum.

inline virtual int bracket(double &ax, double &bx, double &cx, double &fa, double &fb, double &fc, func_t &func)

Given interval (ax,bx), attempt to bracket a minimum for function func.

Upon success, fa=func(ax), fb=func(bx), and fc=func(cx) with fb<fa, fb<fc and ax<bx<cx. The initial values of cx, fa, fb, and fc are all ignored.

The number of iterations is controlled by bracket_iter.

Idea for Future:

Improve this algorithm with the golden ratio method in gsl/min/bracketing.c?

Note

This algorithm can fail if there’s a minimum which has a much smaller size than \( bx-ax \), or if the function has the same value at ax, bx, and the midpoint (ax+bx)/2.

inline virtual const char *type()

Return string denoting type (“min”)

Public Members

int verbose

Output control.

int ntrial

Maximum number of iterations.

double tol_rel

The tolerance for the minimum function value.

double tol_abs

The tolerance for the location of the minimum.

int last_ntrial

The number of iterations used in the most recent minimization.

int bracket_iter

The number of iterations for automatically bracketing a minimum (default 20)

bool err_nonconv

If true, call the error handler if the routine does not “converge”.