ridder#
- scipy.optimize.ridder(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[Quelle]#
Findet eine Nullstelle einer Funktion in einem Intervall mittels Ridder's Methode.
- Parameter:
- fFunktion
Python-Funktion, die eine Zahl zurückgibt. f muss stetig 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
x0wirdnp.isclose(x, x0, atol=xtol, rtol=rtol)erfüllen, wobeixdie exakte Wurzel ist. Der Parameter muss positiv sein.- rtolZahl, optional
Die berechnete Nullstelle
x0erfülltnp.isclose(x, x0, atol=xtol, rtol=rtol), wobeixdie exakte Nullstelle ist. Der Parameter darf nicht kleiner sein als sein Standardwert von4*np.finfo(float).eps.- 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
brentq,brenth,bisect,newton1-D Wurzel-Findung
fixed_pointSkalar-Fixed-Point-Finder
elementweise.find_rooteffizienter elementweiser 1-D-Wurzelfinder
Hinweise
Verwendet die [Ridders1979]-Methode, um eine Nullstelle der Funktion f zwischen den Argumenten a und b zu finden. Ridders' Methode ist schneller als Bisektion, aber im Allgemeinen nicht so schnell wie die Brent-Routinen. [Ridders1979] liefert die klassische Beschreibung und Quelle des Algorithmus. Eine Beschreibung findet sich auch in jeder neueren Ausgabe von Numerical Recipes.
Die hier verwendete Routine weicht leicht von den üblichen Darstellungen ab, um etwas sorgfältiger mit Toleranzen umzugehen.
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, dassridderimmer Nullstellen mit einer relativen Fehlergenauigkeit nahe der Maschinengenauigkeit berechnet. Es sollte darauf geachtet werden, xtol für den jeweiligen Anwendungsfall auszuwählen. Die Einstellungxtol=5e-324, der kleinsten Subnormalzahl, gewährleistet die höchste Genauigkeit. Größere Werte für xtol können nützlich sein, um Funktionsauswertungen zu sparen, wenn eine Nullstelle bei oder nahe Null liegt, in Anwendungen, bei denen die winzigen absoluten Unterschiede zwischen Gleitkommazahlen nahe Null nicht aussagekräftig sind.Referenzen
Beispiele
>>> def f(x): ... return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.ridder(f, 0, 2) >>> root 1.0
>>> root = optimize.ridder(f, -2, 0) >>> root -1.0