bundles / scipy latest / scipy / optimize / _zeros_py / ridder
function
scipy.optimize._zeros_py:ridder
Signature
def ridder ( f , a , b , args = () , xtol = 2e-12 , rtol = 8.881784197001252e-16 , maxiter = 100 , full_output = False , disp = True ) Summary
Find a root of a function in an interval using Ridder's method.
Parameters
f: functionPython function returning a number. f must be continuous, and f(a) and f(b) must have opposite signs.
a: scalarOne end of the bracketing interval [a,b].
b: scalarThe other end of the bracketing interval [a,b].
xtol: number, optionalThe computed root
x0will satisfynp.isclose(x, x0, atol=xtol, rtol=rtol), wherexis the exact root. The parameter must be positive.rtol: number, optionalThe computed root
x0will satisfynp.isclose(x, x0, atol=xtol, rtol=rtol), wherexis the exact root. The parameter cannot be smaller than its default value of4*np.finfo(float).eps.maxiter: int, optionalIf convergence is not achieved in
maxiteriterations, an error is raised. Must be >= 0.args: tuple, optionalContaining extra arguments for the function
f.fis called byapply(f, (x)+args).full_output: bool, optionalIf
full_outputis False, the root is returned. Iffull_outputis True, the return value is(x, r), wherexis the root, and r is a RootResults object.disp: bool, optionalIf True, raise RuntimeError if the algorithm didn't converge. Otherwise, the convergence status is recorded in any RootResults return object.
Returns
root: floatRoot of
fbetweenaandb.r: `RootResults` (present if ``full_output = True``)Object containing information about the convergence. In particular,
r.convergedis True if the routine converged.
Notes
Uses [Ridders1979] method to find a root of the function f between the arguments a and b. Ridders' method is faster than bisection, but not generally as fast as the Brent routines. [Ridders1979] provides the classic description and source of the algorithm. A description can also be found in any recent edition of Numerical Recipes.
The routine used here diverges slightly from standard presentations in order to be a bit more careful of tolerance.
As mentioned in the parameter documentation, the computed root x0 will satisfy np.isclose(x, x0, atol=xtol, rtol=rtol), where x is the exact root. In equation form, this terminating condition is abs(x - x0) <= xtol + rtol * abs(x0).
The default value xtol=2e-12 may lead to surprising behavior if one expects ridder to always compute roots with relative error near machine precision. Care should be taken to select xtol for the use case at hand. Setting xtol=5e-324, the smallest subnormal number, will ensure the highest level of accuracy. Larger values of xtol may be useful for saving function evaluations when a root is at or near zero in applications where the tiny absolute differences available between floating point numbers near zero are not meaningful.
Examples
def f(x): return (x**2 - 1)✓
from scipy import optimize
✓root = optimize.ridder(f, 0, 2) root✓
root = optimize.ridder(f, -2, 0) root✓
See also
- bisect
1-D root-finding
- brenth
1-D root-finding
- brentq
1-D root-finding
- elementwise.find_root
efficient elementwise 1-D root-finder
- fixed_point
scalar fixed-point finder
- newton
1-D root-finding
Aliases
-
scipy.optimize.ridder