bundles / scipy 1.17.1 / scipy / optimize / _zeros_py / brenth
function
scipy.optimize._zeros_py:brenth
Signature
def brenth ( 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 a bracketing interval using Brent's method with hyperbolic extrapolation.
Extended Summary
A variation on the classic Brent routine to find a root of the function f between the arguments a and b that uses hyperbolic extrapolation instead of inverse quadratic extrapolation. Bus & Dekker (1975) guarantee convergence for this method, claiming that the upper bound of function evaluations here is 4 or 5 times that of bisection. f(a) and f(b) cannot have the same signs. Generally, on a par with the brent routine, but not as heavily tested. It is a safe version of the secant method that uses hyperbolic extrapolation. The version here is by Chuck Harris, and implements Algorithm M of [BusAndDekker1975], where further details (convergence properties, additional remarks and such) can be found
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. As with brentq, for nice functions the method will often satisfy the above condition withxtol/2andrtol/2.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. As with brentq, for nice functions the method will often satisfy the above condition withxtol/2andrtol/2.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
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 brenth 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.brenth(f, -2, 0) root✓
root = optimize.brenth(f, 0, 2) root✓
See also
- basinhopping
global optimizers
- bisect
1-D root-finding
- bracket
local scalar minimizers
- brent
local scalar minimizers
- brentq
1-D root-finding
- brute
global optimizers
- differential_evolution
global optimizers
- elementwise.find_root
efficient elementwise 1-D root-finder
- fixed_point
scalar fixed-point finder
- fmin
multivariate local optimizers
- fmin_bfgs
multivariate local optimizers
- fmin_cg
multivariate local optimizers
- fmin_cobyla
constrained multivariate optimizers
- fmin_l_bfgs_b
constrained multivariate optimizers
- fmin_ncg
multivariate local optimizers
- fmin_powell
multivariate local optimizers
- fmin_tnc
constrained multivariate optimizers
- fminbound
local scalar minimizers
- fsolve
N-D root-finding
- golden
local scalar minimizers
- leastsq
nonlinear least squares minimizer
- newton
1-D root-finding
- ridder
1-D root-finding
Aliases
-
scipy.optimize.brenth