


% [x0,v,nev] = nelder_mead_min (f,args,ctl) - Nelder-Mead minimization
%
% Minimize 'f' using the Nelder-Mead algorithm. This function is inspired
% from the that found in the book 'Numerical Recipes'.
%
% ARGUMENTS
% ---------
% f : string : Name of function. Must return a real value
% args : list : Arguments passed to f.
% or matrix : f's only argument
% ctl : vector : (Optional) Control variables, described below
% or struct
%
% RETURNED VALUES
% ---------------
% x0 : matrix : Local minimum of f
% v : real : Value of f in x0
% nev : number : Number of function evaluations
%
% CONTROL VARIABLE : (optional) may be named arguments (i.e. 'name',value
% ------------------ pairs), a struct, or a vector of length <= 6, where
% NaN's are ignored. Default values are written <value>.
% OPT. VECTOR
% NAME POS
% ftol,f N/A : Stopping criterion : stop search when values at simplex
% vertices are all alike, as tested by
%
% f > (max_i (f_i) - min_i (f_i)) /max(max(|f_i|),1)
%
% where f_i are the values of f at the vertices. <10*eps>
%
% rtol,r N/A : Stop search when biggest radius of simplex, using
% infinity-norm, is small, as tested by :
%
% ctl(2) > Radius <10*eps>
%
% vtol,v N/A : Stop search when volume of simplex is small, tested by
%
% ctl(2) > Vol
%
% crit,c ctl(1) : Set one stopping criterion, 'ftol' (c=1), 'rtol' (c=2)
% or 'vtol' (c=3) to the value of the 'tol' option. <1>
%
% tol, t ctl(2) : Threshold in termination test chosen by 'crit' <10*eps>
%
% narg ctl(3) : Position of the minimized argument in args <1>
% maxev ctl(4) : Maximum number of function evaluations. This number <inf>
% may be slightly exceeded.
% isz ctl(5) : Size of initial simplex, which is : <1>
%
% { x + e_i | i in 0..N }
%
% Where x == nth (args, narg) is the initial value
% e_0 == zeros (size (x)),
% e_i(j) == 0 if j ~= i and e_i(i) == ctl(5)
% e_i has same size as x
%
% Set ctl(5) to the distance you expect between the starting
% point and the minimum.
%
% rst ctl(6) : When a minimum is found the algorithm restarts next to
% it until the minimum does not improve anymore. ctl(6) is
% the maximum number of restarts. Set ctl(6) to zero if
% you know the function is well-behaved or if you don't
% mind not getting a true minimum. <0>
%
% verbose, v Be more or less verbose (quiet=0) <0>