Minimize a function using modified Powell’s method. This method only uses function values, not derivatives.
Parameters :  func : callable f(x,*args)
x0 : ndarray
args : tuple
callback : callable
direc : ndarray


Returns :  xopt : ndarray
fopt : number
direc : ndarray
iter : int
funcalls : int
warnflag : int
allvecs : list

Other Parameters:  
xtol : float
ftol : float
maxiter : int
maxfun : int
full_output : bool
disp : bool
retall : bool

See also
Notes
Uses a modification of Powell’s method to find the minimum of a function of N variables. Powell’s method is a conjugate direction method.
The algorithm has two loops. The outer loop merely iterates over the inner loop. The inner loop minimizes over each current direction in the direction set. At the end of the inner loop, if certain conditions are met, the direction that gave the largest decrease is dropped and replaced with the difference between the current estiamted x and the estimated x from the beginning of the innerloop.
The technical conditions for replacing the direction of greatest increase amount to checking that
References
Powell M.J.D. (1964) An efficient method for finding the minimum of a function of several variables without calculating derivatives, Computer Journal, 7 (2):155162.
Press W., Teukolsky S.A., Vetterling W.T., and Flannery B.P.: Numerical Recipes (any edition), Cambridge University Press