# Sci.Root: Root Finding Algorithms

This module implements algorithms that for a given function f numerically solve the equation: $$f(x) = 0$$ The value x is called a root of the function f. The function f can be a function of one or more variables, in which case x is a vector.

## API

##### x, y, xl, xu, yl, yu = root.ridders(f, xl, xu, stop)

A derivative-free root-finding algorithm for univariate functions. It has a performance comparable to the Brent's method. Only the first value returned by f is used, additional returned values are ignored. The root is assumed to be bracketed by the range (xl, xu). The function stop is called after every iteration of the algorithm and has the following signature: function(x, y, xl, xu, yl, yu) where x, xl, xu are the current root estimate and the current bracketing interval (which shrinks toward the root) and y, yl, yu are the evaluations of f at these points. If at any iteration the function stop returns true the algorithm terminates and returns the same values that has been passed to stop(x, y, xl, xu, yl, yu).

##### x, y, xl, xu, yl, yu = root.newton(f, xl, xu, stop)

A root-finding algorithm for univariate functions which uses the first derivative of the function to speed-up convergence. The first and second values returned by f are the evaluation of f and the evaluation of the first derivative of f. Additional returned values are ignored. The root is assumed to be bracketed by the range (xl, xu). The function stop() is used as explained in root.ridders(). Moreover the algorithm stops if at any iteration an exact root (y == 0) is found in which case it returns the current values (x, y, xl, xu, yl, yu). Under a number of circumstances the algorithm may fail to converge. In this case nil and a string error message are returned.

##### x, y, xl, xu, yl, yu = root.halley(f, xl, xu, stop)

A root-finding algorithm for univariate functions which uses the first and second derivatives of the function to speed-up convergence. The first, second and third values returned by f are the evaluation of f and the evaluation of the first and second derivatives of f. Additional returned values are ignored. The root is assumed to be bracketed by the range (xl, xu). The function stop() is used as explained in root.ridders(). Moreover the algorithm stops if at any iteration an exact root (y == 0) is found in which case it returns the current values (x, y, xl, xu, yl, yu). Under a number of circumstances the algorithm may fail to converge. In this case nil and a string error message are returned.