brenth#
- scipy.optimize.brenth(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[Quelle]#
Findet eine Wurzel einer Funktion in einem klammernden Intervall mit Brents Methode mit hyperbolischer Extrapolation.
Eine Variante der klassischen Brent-Routine zur Suche nach einer Wurzel der Funktion f zwischen den Argumenten a und b, die hyperbolische Extrapolation anstelle von inverser quadratischer Extrapolation verwendet. Bus & Dekker (1975) garantieren die Konvergenz für diese Methode und behaupten, dass die Obergrenze der Funktionsauswertungen hier 4- bis 5-mal höher ist als bei der Bisektion. f(a) und f(b) dürfen keine gleichen Vorzeichen haben. Im Allgemeinen ist sie mit der Brent-Routine vergleichbar, aber nicht so intensiv getestet. Es ist eine sichere Version der Sekantenmethode, die hyperbolische Extrapolation verwendet. Die hier verwendete Version stammt von Chuck Harris und implementiert Algorithmus M von [BusAndDekker1975], wo weitere Details (Konvergenzeigenschaften, zusätzliche Anmerkungen usw.) zu finden sind.
- Parameter:
- fFunktion
Python-Funktion, die eine Zahl zurückgibt. f muss kontinuierlich sein und f(a) und f(b) müssen entgegengesetzte Vorzeichen haben.
- aSkalar
Ein Ende des klammernden Intervalls [a,b].
- bSkalar
Das andere Ende des klammernden Intervalls [a,b].
- xtolZahl, optional
Die berechnete Wurzel
x0erfülltnp.isclose(x, x0, atol=xtol, rtol=rtol), wobeixdie exakte Wurzel ist. Der Parameter muss positiv sein. Wie beibrentqerfüllt die Methode für "nette" Funktionen oft die obige Bedingung mitxtol/2undrtol/2.- rtolZahl, optional
Die berechnete Wurzel
x0erfülltnp.isclose(x, x0, atol=xtol, rtol=rtol), wobeixdie exakte Wurzel ist. Der Parameter darf nicht kleiner sein als sein Standardwert von4*np.finfo(float).eps. Wie beibrentqerfüllt die Methode für "nette" Funktionen oft die obige Bedingung mitxtol/2undrtol/2.- maxiterint, optional
Wenn die Konvergenz nicht in maxiter Iterationen erreicht wird, wird ein Fehler ausgelöst. Muss >= 0 sein.
- argstuple, optional
Enthält zusätzliche Argumente für die Funktion f. f wird mit
apply(f, (x)+args)aufgerufen.- full_outputbool, optional
Wenn full_output False ist, wird die Wurzel zurückgegeben. Wenn full_output True ist, ist der Rückgabewert
(x, r), wobei x die Wurzel ist und r einRootResults-Objekt ist.- dispbool, optional
Wenn True, wird ein RuntimeError ausgelöst, wenn der Algorithmus nicht konvergiert. Andernfalls wird der Konvergenzstatus in einem beliebigen
RootResults-Rückgabeobjekt aufgezeichnet.
- Rückgabe:
- rootfloat
Wurzel von f zwischen a und b.
- r
RootResults(vorhanden, wennfull_output = True) Objekt, das Informationen über die Konvergenz enthält. Insbesondere ist
r.convergedTrue, wenn die Routine konvergiert hat.
Siehe auch
fmin,fmin_powell,fmin_cg,fmin_bfgs,fmin_ncgmultivariate lokale Optimierer
leastsqnichtlineare Kleinste-Quadrate-Minimierer
fmin_l_bfgs_b,fmin_tnc,fmin_cobylabeschränkte multivariate Optimierer
basinhopping,differential_evolution,bruteglobale Optimierer
fminbound,brent,golden,bracketlokale Skalar-Minimierer
fsolveN-D Wurzel-Findung
brentq,ridder,bisect,newton1-D Wurzel-Findung
fixed_pointSkalar-Fixed-Point-Finder
elementweise.find_rooteffizienter elementweiser 1-D-Wurzelfinder
Hinweise
Wie in der Parameterdokumentation erwähnt, wird die berechnete Wurzel
x0np.isclose(x, x0, atol=xtol, rtol=rtol)erfüllen, wobeixdie exakte Wurzel ist. In Gleichungsform ist diese Abbruchbedingungabs(x - x0) <= xtol + rtol * abs(x0).Der Standardwert
xtol=2e-12kann zu überraschenden Ergebnissen führen, wenn man erwartet, dassbrenthimmer Wurzeln mit einer relativen Genauigkeit nahe der Maschinengenauigkeit berechnet. Es ist Vorsicht geboten bei der Auswahl von xtol für den jeweiligen Anwendungsfall. Wennxtol=5e-324gesetzt wird, der kleinsten Subnormalzahl, wird die höchste Genauigkeit gewährleistet. Größere Werte für xtol können nützlich sein, um Funktionsauswertungen zu sparen, wenn eine Wurzel bei oder nahe Null liegt, in Anwendungen, bei denen die winzigen absoluten Unterschiede zwischen Gleitkommazahlen nahe Null nicht aussagekräftig sind.Referenzen
[BusAndDekker1975]Bus, J. C. P., Dekker, T. J., „Two Efficient Algorithms with Guaranteed Convergence for Finding a Zero of a Function“, ACM Transactions on Mathematical Software, Vol. 1, Issue 4, Dez. 1975, S. 330-345. Abschnitt 3: „Algorithmus M“. DOI:10.1145/355656.355659
Beispiele
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.brenth(f, -2, 0) >>> root -1.0
>>> root = optimize.brenth(f, 0, 2) >>> root 1.0