The DFPMIN procedure minimizes a user-written function Func of two or more independent variables using the Broyden-Fletcher-Goldfarb-Shanno variant of the Davidon-Fletcher-Powell method, using its gradient as calculated by a user-written function Dfunc.
DFPMIN is based on the routine dfpmin described in section 10.7 of Numerical Recipes in C: The Art of Scientific Computing (Second Edition), published by Cambridge University Press, and is used by permission.
Examples
To minimize the function MINIMUM:
PRO example_dfpmin
X = [1.0, 1.0]
Gtol = 1.0e-7
DFPMIN, X, Gtol, Fmin, 'minimum', 'grad'
PRINT, X
END
FUNCTION minimum, X
RETURN, (X[0] - 3.0)^4 + (X[1] - 2.0)^2
END
FUNCTION grad, X
RETURN, [4.0*(X[0] - 3.0)^3, 2.0*(X[1] - 2.0)]
END
IDL prints:
3.00175 2.00000
Syntax
DFPMIN, X, Gtol, Fmin, Func, Dfunc [, /DOUBLE] [, EPS=value] [, ITER=variable] [, ITMAX=value] [, STEPMAX=value] [, TOLX=value]
Arguments
X
On input, X is an n-element vector specifying the starting point. On output, it is replaced with the location of the minimum.
Note: If DFPMIN is complex then only the real part is used for the computation.
Gtol
An input value specifying the convergence requirement on zeroing the gradient.
Fmin
On output, Fmin contains the value at the minimum-point X of the user-supplied function specified by Func.
Func
A scalar string specifying the name of a user-supplied IDL function of two or more independent variables to be minimized. This function must accept a vector argument X and return a scalar result.
For example, suppose we wish to find the minimum value of the function
y = (x0 – 3)4 + (x1 – 2)2
To evaluate this expression, we define an IDL function named MINIMUM:
FUNCTION minimum, X
RETURN, (X[0] - 3.0)^4 + (X[1] - 2.0)^2
END
Dfunc
A scalar string specifying the name of a user-supplied IDL function that calculates the gradient of the function specified by Func. This function must accept a vector argument X and return a vector result.
For example, the gradient of the above function is defined by the partial derivatives:
We can write a function GRAD to express these relationships in the IDL language:
FUNCTION grad, X
RETURN, [4.0*(X[0] - 3.0)^3, 2.0*(X[1] - 2.0)]
END
Keywords
DOUBLE
Set this keyword to force the computation to be done in double-precision arithmetic.
EPS
Use this keyword to specify a number close to the machine precision. For single-precision calculations, the default value is 3.0 x 10-8. For double-precision calculations, the default value is 3.0 x 10-16.
ITER
Use this keyword to specify a named variable which returns the number of iterations performed.
ITMAX
Use this keyword to specify the maximum number of iterations allowed. The default value is 200.
STEPMAX
Use this keyword to specify the scaled maximum step length allowed in line searches. The default value is 100.0
TOLX
Use this keyword to specify the convergence criterion on X values. The default value is 4 x EPS.
Version History
See Also
AMOEBA, POWELL, SIMPLEX