Documentation |
Find minimum of single-variable function on fixed interval
x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
x = fminbnd(problem)
[x,fval] = fminbnd(...)
[x,fval,exitflag] = fminbnd(...)
[x,fval,exitflag,output] = fminbnd(...)
fminbnd finds the minimum of a function of one variable within a fixed interval.
x = fminbnd(fun,x1,x2) returns a value x that is a local minimizer of the function that is described in fun in the interval x1 < x < x2. fun is a function_handle.
Parameterizing Functions in the MATLAB^{®} Mathematics documentation, explains how to pass additional parameters to your objective function fun.
x = fminbnd(fun,x1,x2,options) minimizes with the optimization parameters specified in the structure options. You can define these parameters using the optimset function. fminbnd uses these options structure fields:
Display | Level of display. 'off' displays no output; 'iter' displays output at each iteration; 'final' displays just the final output; 'notify' (default) displays output only if the function does not converge. See Iterative Display in MATLAB Mathematics for more information. |
Check whether objective function values are valid. 'on' displays an error when the objective function returns a value that is complex or NaN. 'off' displays no error. | |
MaxFunEvals | Maximum number of function evaluations allowed. |
MaxIter | Maximum number of iterations allowed. |
User-defined function that is called at each iteration. See Output Functions in MATLAB Mathematics for more information. | |
Plots various measures of progress while the algorithm executes, select from predefined plots or write your own. Pass a function handle or a cell array of function handles. The default is none ([]).
See Plot Functions in MATLAB Mathematics for more information. | |
TolX | Termination tolerance on x. |
x = fminbnd(problem) finds the minimum for problem, where problem is a structure with the following fields:
objective | Objective function |
x1 | Left endpoint |
x2 | Right endpoint |
solver | 'fminbnd' |
options | Options structure created using optimset |
[x,fval] = fminbnd(...) returns the value of the objective function computed in fun at x.
[x,fval,exitflag] = fminbnd(...) returns a value exitflag that describes the exit condition of fminbnd:
fminbnd converged to a solution x based on options.TolX. | |
Maximum number of function evaluations or iterations was reached. | |
Algorithm was terminated by the output function. | |
Bounds are inconsistent (x1 > x2). |
[x,fval,exitflag,output] = fminbnd(...) returns a structure output that contains information about the optimization in the following fields:
'golden section search, parabolic interpolation' | |
Number of function evaluations | |
Number of iterations | |
Exit message |
fun is the function to be minimized. fun accepts a scalar x and returns a scalar f, the objective function evaluated at x. The function fun can be specified as a function handle for a function file
x = fminbnd(@myfun,x1,x2);
where myfun.m is a function file such as
function f = myfun(x) f = ... % Compute function value at x.
or as a function handle for an anonymous function:
x = fminbnd(@(x) sin(x*x),x1,x2);
Other arguments are described in the syntax descriptions above.
x = fminbnd(@cos,3,4) computes π to a few decimal places and gives a message on termination.
[x,fval,exitflag] = ... fminbnd(@cos,3,4,optimset('TolX',1e-12,'Display','off'))
computes π to about 12 decimal places, suppresses output, returns the function value at x, and returns an exitflag of 1.
The argument fun can also be a function handle for an anonymous function. For example, to find the minimum of the function f(x) = x^{3} – 2x – 5 on the interval (0,2), create an anonymous function f
f = @(x)x.^3-2*x-5;
Then invoke fminbnd with
x = fminbnd(f, 0, 2)
The result is
x = 0.8165
The value of the function at the minimum is
y = f(x) y = -6.0887
If fun is parameterized, you can use anonymous functions to capture the problem-dependent parameters. For example, suppose you want to minimize the objective function myfun defined by the following function file:
function f = myfun(x,a) f = (x - a)^2;
Note that myfun has an extra parameter a, so you cannot pass it directly to fminbind. To optimize for a specific value of a, such as a = 1.5.
The function to be minimized must be continuous. fminbnd may only give local solutions.
fminbnd often exhibits slow convergence when the solution is on a boundary of the interval.
fminbnd only handles real variables.
[1] Forsythe, G. E., M. A. Malcolm, and C. B. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, 1976.
[2] Brent, Richard. P., Algorithms for Minimization without Derivatives, Prentice-Hall, Englewood Cliffs, New Jersey, 1973