fminbnd: Finding Function Minimum In pracma: Practical Numerical Math Functions

Description

Find minimum of single-variable function on fixed interval.

Usage

 1 2 fminbnd(f, a, b, maxiter = 1000, maximum = FALSE, tol = 1e-07, rel.tol = tol, abs.tol = 1e-15, ...)

Arguments

 f function whose minimum or maximum is to be found. a, b endpoints of the interval to be searched. maxiter maximal number of iterations. maximum logical; shall maximum or minimum be found; default FALSE. tol relative tolerance; left over for compatibility. rel.tol, abs.tol relative and absolute tolerance. ... additional variables to be passed to the function.

Details

fminbnd finds the minimum of a function of one variable within a fixed interval. It applies Brent's algorithm, based on golden section search and parabolic interpolation.

fminbnd may only give local solutions. fminbnd never evaluates f at the endpoints.

Value

List with

 xmin location of the minimum resp. maximum. fmin function value at the optimum. niter number of iterations used. estim.prec estimated precision.

Note

fminbnd mimics the Matlab function of the same name.

References

R. P. Brent (1973). Algorithms for Minimization Without Derivatives. Dover Publications, reprinted 2002.

Examples

 1 2 3 4 5 6 7 8 9 10 11 12 13 ## CHEBFUN example by Trefethen f <- function(x) exp(x)*sin(3*x)*tanh(5*cos(30*x)) fminbnd(f, -1, 1) # fourth local minimum (from left) g <- function(x) complexstep(f, x) # complex-step derivative xs <- findzeros(g, -1, 1) # local minima and maxima ys <- f(xs); n0 <- which.min(ys) # index of global minimum fminbnd(f, xs[n0-1], xs[n0+1]) # xmin:0.7036632, fmin: -1.727377 ## Not run: ezplot(f, -1, 1, n = 1000, col = "darkblue", lwd = 2) ezplot(function(x) g(x)/150, -1, 1, n = 1000, col = "darkred", add = TRUE) grid() ## End(Not run)

Example output \$xmin
 -0.2429114

\$fmin
 -0.517464

\$niter
 17

\$estim.prec
 2.429114e-08

\$xmin
 0.7036632

\$fmin
 -1.727377

\$niter
 14

\$estim.prec
 7.036632e-08

pracma documentation built on Dec. 11, 2021, 9:57 a.m.