uniroot                package:stats                R Documentation

One Dimensional Root (Zero) Finding

Description:

     The function 'uniroot' searches the interval from 'lower' to
     'upper' for a root (i.e., zero) of the function 'f' with respect
     to its first argument.

Usage:

     uniroot(f, interval, lower = min(interval), upper = max(interval),
             tol = .Machine$double.eps^0.25, maxiter = 1000, ...)

Arguments:

       f: the function for which the root is sought.

interval: a vector containing the end-points of the interval to be
          searched for the root.

   lower: the lower end point of the interval to be searched.

   upper: the upper end point of the interval to be searched.

     tol: the desired accuracy (convergence tolerance).

 maxiter: the maximum number of iterations.

     ...: additional arguments to 'f'.

Details:

     Either 'interval' or both 'lower' and 'upper' must be specified. 
     The function uses Fortran subroutine '"zeroin"' (from Netlib)
     based on algorithms given in the reference below.

     If the algorithm does not converge in 'maxiter' steps, a warning
     is printed and the current approximation is returned.

Value:

     A list with four components: 'root' and 'f.root' give the location
     of the root and the value of the function evaluated at that point.
     'iter' and 'estim.prec' give the number of iterations used and an
     approximate estimated precision for 'root'.

References:

     Brent, R. (1973) _Algorithms for Minimization without
     Derivatives._ Englewood Cliffs, NJ: Prentice-Hall.

See Also:

     'polyroot' for all complex roots of a polynomial; 'optimize',
     'nlm'.

Examples:

     f <- function (x,a) x - a
     str(xmin <- uniroot(f, c(0, 1), tol = 0.0001, a = 1/3))
     str(uniroot(function(x) x*(x^2-1) + .5, low = -2, up = 2, tol = 0.0001),
         dig = 10)
     str(uniroot(function(x) x*(x^2-1) + .5, low = -2, up =2 , tol = 1e-10 ),
         dig = 10)

     ## Find the smallest value x for which exp(x) > 0 (numerically):
     r <- uniroot(function(x) 1e80*exp(x) -1e-300,,-1000,0, tol=1e-20)
     str(r, digits= 15)##> around -745.1332191

     exp(r$r)        # = 0, but not for r$r * 0.999...
     minexp <- r$r * (1 - .Machine$double.eps)
     exp(minexp)     # typically denormalized

