brentq#
- scipy.optimize.brentq(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[Quelle]#
Eine Wurzel einer Funktion in einem Klammerintervall mit Brents Methode finden.
Verwendet die klassische Brentsche Methode, um eine Wurzel der Funktion f im vorzeichenwechselnden Intervall [a , b] zu finden. Gilt allgemein als die beste der hier aufgeführten Wurzelauffindungsroutinen. Es ist eine sichere Version der Sekantenmethode, die die inverse quadratische Extrapolation verwendet. Brents Methode kombiniert Wurzelklammerung, Intervallhalbierung und inverse quadratische Interpolation. Sie ist manchmal auch als Van-Wijngaarden-Dekker-Brent-Methode bekannt. Brent (1973) behauptet, dass die Konvergenz für im Intervall [a,b] berechenbare Funktionen garantiert ist.
[Brent1973] liefert die klassische Beschreibung des Algorithmus. Eine weitere Beschreibung findet sich in einer neueren Ausgabe von Numerical Recipes, einschließlich [PressEtal1992]. Eine dritte Beschreibung ist unter http://mathworld.wolfram.com/BrentsMethod.html zu finden. Der Algorithmus sollte allein durch Lesen unseres Codes leicht verständlich sein. Unser Code weicht von den Standarddarstellungen ab: Wir wählen eine andere Formel für den Extrapolationsschritt.
- Parameter:
- fFunktion
Python-Funktion, die eine Zahl zurückgibt. Die Funktion \(f\) muss kontinuierlich sein, und \(f(a)\) und \(f(b)\) müssen entgegengesetzte Vorzeichen haben.
- aSkalar
Ein Ende des Klammerintervalls \([a, b]\).
- bSkalar
Das andere Ende des Klammerintervalls \([a, b]\).
- xtolZahl, optional
Die berechnete Wurzel
x0wird die Bedingungnp.isclose(x, x0, atol=xtol, rtol=rtol)erfüllen, wobeixdie exakte Wurzel ist. Der Parameter muss positiv sein. Bei "schönen" Funktionen wird die Brentsche Methode oft die obige Bedingung mitxtol/2undrtol/2erfüllen. [Brent1973]- rtolZahl, optional
Die berechnete Wurzel
x0wird die Bedingungnp.isclose(x, x0, atol=xtol, rtol=rtol)erfüllen, wobeixdie exakte Wurzel ist. Der Parameter darf nicht kleiner sein als sein Standardwert von4*np.finfo(float).eps. Bei "schönen" Funktionen wird die Brentsche Methode oft die obige Bedingung mitxtol/2undrtol/2erfüllen. [Brent1973]- 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
brenth,ridder,bisect,newton1-D Wurzel-Findung
fixed_pointSkalar-Fixed-Point-Finder
elementweise.find_rooteffizienter elementweiser 1-D-Wurzelfinder
Hinweise
f muss kontinuierlich sein. f(a) und f(b) müssen entgegengesetzte Vorzeichen haben.
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 überraschendem Verhalten führen, wenn man erwartet, dassbrentqimmer Wurzeln mit einem relativen Fehler nahe der Maschinengenauigkeit berechnet. Es ist Vorsicht geboten, xtol für den jeweiligen Anwendungsfall auszuwählen. Wennxtol=5e-324gesetzt wird, die kleinste subnormale Zahl, wird die höchste Genauigkeit gewährleistet. Größere Werte von 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, die zwischen Gleitkommazahlen nahe Null verfügbar sind, nicht aussagekräftig sind.Referenzen
[Brent1973] (1,2,3)Brent, R. P., Algorithms for Minimization Without Derivatives. Englewood Cliffs, NJ: Prentice-Hall, 1973. Kap. 3-4.
[PressEtal1992]Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T. Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: Cambridge University Press, pp. 352-355, 1992. Abschnitt 9.3: „Van Wijngaarden-Dekker-Brent Method.“
Beispiele
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.brentq(f, -2, 0) >>> root -1.0
>>> root = optimize.brentq(f, 0, 2) >>> root 1.0