Routines (alphabetical) > Routines: P > POWELL

POWELL

Syntax | Arguments | Keywords | Examples | Version History | See Also

The POWELL procedure minimizes a user-written function Func of two or more independent variables using the Powell method. POWELL does not require a user-supplied analytic gradient.

POWELL is based on the routine powell described in section 10.5 of Numerical Recipes in C: The Art of Scientific Computing (Second Edition), published by Cambridge University Press, and is used by permission.

Syntax

POWELL, P, Xi, Ftol, Fmin, Func [, /DOUBLE ] [, ITER =variable] [, ITMAX=value]

Arguments

P

On input, P is an n-element vector specifying the starting point. On output, it is replaced with the location of the minimum.

Note: If POWELL is complex then only the real part is used for the computation.

Xi

On input, Xi is an initial n by n element array whose columns contain the initial set of directions (usually the n unit vectors). On output, it is replaced with the then-current directions.

Ftol

An input value specifying the fractional tolerance in the function value. Failure to decrease by more than Ftol in one iteration signals completeness. For single-precision computations, a value of 1.0 ∞ 10-4 is recommended; for double-precision computations, a value of 1.0 ∞ 10-8 is recommended.

Fmin

On output, Fmin contains the value at the minimum-point P 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 minimize the function

To evaluate this expression, we define an IDL function named POWFUNC:

FUNCTION powfunc, X

   RETURN, (X[0] + 2.0*X[1]) * EXP(-X[0]^2 -X[1]^2)

END

Keywords

DOUBLE

Set this keyword to force the computation to be done in double-precision arithmetic.

ITER

Use this keyword to specify an output variable that will be set to the number of iterations performed.

ITMAX

Use this keyword to specify the maximum allowed number of iterations. The default is 200.

Note: POWELL halts once the value specified with ITMAX has been reached.

Examples

We can use POWELL to minimize the function POWFUNC given above.

FUNCTION powfunc, X
   RETURN, (X[0] + 2.0*X[1]) * EXP(-X[0]^2 -X[1]^2)
END

PRO TEST_POWELL

   ; Define the fractional tolerance:
   ftol = 1.0e-4

   ; Define the starting point:
   P = [.5d, -.25d]

   ; Define the starting directional vectors in column format:
   xi = TRANSPOSE([[1.0, 0.0],[0.0, 1.0]])

   ; Minimize the function:
   POWELL, P, xi, ftol, fmin, 'powfunc'

   ; Print the solution point:
   PRINT, 'Solution point: ', P

   ; Print the value at the solution point:
   PRINT, 'Value at solution point: ', fmin

END

TEST_POWELL

IDL prints:

Solution point:    -0.31622777 -0.63245552

Value at solution point:    -0.95900918

The exact solution point is [-0.31622777, -0.63245553].

The exact minimum function value is -0.95900918.

Version History

4.0

Introduced

See Also

AMOEBA , DFPMIN , SIMPLEX