help mata mm_nrroot()


mm_nrroot() -- Newton-Raphson univariate zero (root) finder


rc = mm_nrroot(x, fdf [, tol, itr, ...])


rc: the return code; rc!=0 indicates that no valid solution has been found

x: real scalar containing initial guess; x will be replaced by a real scalar containing solution

fdf: pointer scalar containing address of function supplying the function value and the first derivative; usually this is coded &funcname()

tol: real scalar specifying acceptable tolerance for the root estimate (default is tol=0 to find the root as accurate as possible)

itr: real scalar specifying the maximum number of iterations (default is itr=1000)

...: up to 10 additional arguments to pass on to function fdf


mm_nrroot() uses the Newton-Raphson method to search for the root of a function with respect to its first argument. That is, mm_nrroot() approximates the value x for which the function evaluates to zero. The accuracy of the approximation is 4e+4*epsilon(x) + tol.

mm_nrroot() stores the found solution in x and issues return code rc. Possible return codes are:

0: everything went well

1: convergence has not been reached within the maximum number of iterations; x will contain the current approximation

mm_nrroot() is based on the example given in Press et al. (1992:365-366).



: function myfunc(x, a) { > fn = x^2 - a > df = 2*x > return(fn, df) > }

: a = 2/3 : mm_nrroot(x=1, &myfunc(), 0, 1000, a) 0

: x .8164965809

: mm_nrroot(x=1, &myfunc(), 0.01, 1000, a) 0

: x .8164965986

: sqrt(a) .8164965809


mm_nrroot(x, fdf, tol, itr, ...): x: 1 x 1 fdf: 1 x 1 tol: 1 x 1 itr: 1 x 1 ...: (depending on function fdf) result: 1 x 1


x will be set to missing if the function value or the derivative evaluates to missing at some point in the algorithm.

Source code



Press, William H., Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery (1992). Numerical Recipes in C. The Art of Scientific Computing. Second Edition. Cambridge University Press.


Ben Jann, ETH Zurich,

Also see