## Contents

- `fminlbfgs`
- Usage
- Description
- Input arguments
- Output arguments
- Options
- Examples
- See also

## `fminlbfgs`

Finds a local minimum of a function of several variables.

## Usage

    [x,fval,exitflag,output,grad] = fminlbfgs(fun,x0,options)

## Description

This optimizer is developed for image registration methods with large amounts of unknown variables.

Optimization methods supported: * Quasi Newton Broyden–Fletcher–Goldfarb–Shanno (BFGS) * Limited memory BFGS (L-BFGS) * Steepest Gradient Descent optimization.

## Input arguments

`fun`

Function handle or string which is minimized, returning an error value and optionally the error gradient.

Note that the speed of this optimizer can be improved by also providing the gradient at X. Write the `fun` function as follows

    function [f, g] = FUN(X)
        f % = ...          function value calculation at X
        if (nargout > 1)
            g % = ...      gradient calculation at X
        end
    end

`x0`

Initial values of unknowns can be a scalar, vector or matrix (optional)

`options`

Structure with optimizer options, made by a struct or `optimset`. Note that `optimset` does not support all input options.

## Output arguments

`x`

The found location (values) which minimize the function.

`fval`

The function value at the solution found.

`exitflag`

Gives value, which explain why the minimizer stopped. Possible values of `exitflag`, and the corresponding exit conditions are

           1: Change in the objective function value was less than the
            specified tolerance TolFun.
            2: Change in x was smaller than the specified tolerance TolX.
            3: Magnitude of gradient smaller than the specified tolerance.
            4: Boundary fminimum reached.
            0: Number of iterations exceeded options.MaxIter or number of
            function evaluations exceeded options.FunEvals.
        -1: Algorithm was terminated by the output function.
           -2: Line search cannot find an acceptable point along the current
            search.

`output`

Structure with all important ouput values and parameters

`grad`

the gradient at this location.

## Options

`'GoalsExactAchieve'`

If set to 0, a line search method is used which uses a few function calls to do a good line search. When set to 1 a normal line search method with Wolfe conditions is used (default).

`'GradConstr'`

Set this variable to true if gradient calls are cpu-expensive (default). If false more gradient calls are used and less function calls.

`'HessUpdate'`

If set to 'bfgs', Broyden–Fletcher–Goldfarb–Shanno optimization is used (default), when the number of unknowns is larger then 3000 the function will switch to Limited memory BFGS, or if you set it to 'lbfgs'. When set to 'steepdesc', steepest decent optimization is used.

`'StoreN'`

Number of itterations used to approximate the Hessian, in L-BFGS, 20 is default. A lower value may work better with non smooth functions, because than the Hessian is only valid for a specific position. A higher value is recommend with quadratic equations.

`'GradObj'`

Set to 'on' if gradient available otherwise finited difference is used.

`'Display'`

Level of display. 'off' displays no output; 'plot' displays all linesearch results in figures. 'iter' displays output at each iteration; 'final' displays just the final output; 'notify' displays output only if the function does not converge.

`'TolX'`

Termination tolerance on x, default 1e-6.

`'TolFun'`

Termination tolerance on the function value, default 1e-6.

`'MaxIter'`

Maximum number of iterations allowed, default 400.

`'MaxFunEvals'`

Maximum number of function evaluations allowed, default 100 times the amount of unknowns.

`'DiffMaxChange'`

Maximum stepsize used for finite difference gradients.

`'DiffMinChange'`

Minimum stepsize used for finite difference gradients.

`'OutputFcn'`

User-defined function that an optimization function calls at each iteration.

`'rho'`

Wolfe condition on gradient (c1 on wikipedia), default 0.01.

`'sigma'`

Wolfe condition on gradient (c2 on wikipedia), default 0.9.

`'tau1'`

Bracket expansion if stepsize becomes larger, default 3.

`'tau2'`

Left bracket reduction used in section phase, default 0.1.

`'tau3'`

Right bracket reduction used in section phase, default 0.5.

## Examples

    options = optimset('GradObj','on');
    X = fminlbfgs(@myfun,2,options)

    X =
        4.712388980391753e+000

where myfun is a MATLAB function such as:

    function [f,g] = myfun(x)
        f = sin(x) + 3;
        if ( nargout > 1 )
            g = cos(x); end
    end

## See also

optimset, fminsearch, fminbnd, fmincon, fminunc, @, inline.