bundles / scipy 1.17.1 / scipy / optimize / _zeros_py / bisect
function
scipy.optimize._zeros_py:bisect
Signature
def bisect ( f , a , b , args = () , xtol = 2e-12 , rtol = 8.881784197001252e-16 , maxiter = 100 , full_output = False , disp = True ) Summary
Find root of a function within an interval using bisection.
Extended Summary
Basic bisection routine to find a root of the function f between the arguments a and b. f(a) and f(b) cannot have the same signs. Slow but sure.
Parameters
f: functionPython function returning a number.
fmust 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), where x is 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 a 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
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 bisect 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.bisect(f, 0, 2) root✓
root = optimize.bisect(f, -2, 0) root✓
See also
Aliases
-
scipy.optimize.bisect