###
Arguments

####
X

A 3-element real or complex initial guess vector. Real initial guesses may result in real or complex roots. Complex initial guesses will result in complex roots.

####
Func

A scalar string specifying the name of a user-supplied IDL function that defines the univariate nonlinear function. This function must accept the vector argument X.

For example, suppose we wish to find a root of the following function:

We write a function FUNC to express the function in the IDL language:

FUNCTION func, X

RETURN, EXP(SIN(X)^2 + COS(X)^2 - 1) - 1

END

###
Keywords

####
DOUBLE

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

####
ITMAX

The maximum allowed number of iterations. The default is 100.

####
STOP

Use this keyword to specify the stopping criterion used to judge the accuracy of a computed root r(*
k*
). Setting STOP = 0 (the default) checks whether the absolute value of the difference between two successively-computed roots, | r(*
k*
) - r(*
k*
+1) | is less than the stopping tolerance TOL. Setting STOP = 1 checks whether the absolute value of the function FUNC at the current root, | FUNC(r(*
k*
)) |, is less than TOL.

####
TOL

Use this keyword to specify the stopping error tolerance. The default is 1.0 *
¥*
10^{
-4}
.

###
Example

To find the roots of the function FUNC defined above, first define a real 3-element initial guess vector:

x = [0.0, -!pi/2, !pi]

Compute a root of the function using double-precision arithmetic.

root = FX_ROOT(X, 'FUNC', /DOUBLE)

Check the accuracy of the computed root.

PRINT, EXP(SIN(ROOT)^2 + COS(ROOT)^2 - 1) - 1

IDL prints:

0.0000000

We can also define a complex 3-element initial guess vector:

X = [COMPLEX(-!PI/3, 0), COMPLEX(0, !PI), COMPLEX(0, -!PI/6)]

root = FX_ROOT(x, 'FUNC')

Check the accuracy of the computed complex root.

PRINT, EXP(SIN(ROOT)^2 + COS(ROOT)^2 - 1) - 1

IDL prints:

( 0.00000, 0.00000)