scipy.optimize.

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 x0 wird np.isclose(x, x0, atol=xtol, rtol=rtol) erfüllen, wobei x die exakte Wurzel ist. Der Parameter muss positiv sein.

rtolZahl, optional

Die berechnete Nullstelle x0 erfüllt np.isclose(x, x0, atol=xtol, rtol=rtol), wobei x die exakte Nullstelle ist. Der Parameter darf nicht kleiner sein als sein Standardwert von 4*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 ein RootResults-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.

rRootResults (vorhanden, wenn full_output = True)

Objekt, das Informationen über die Konvergenz enthält. Insbesondere ist r.converged True, wenn die Routine konvergiert hat.

Siehe auch

brentq, brenth, bisect, newton

1-D Wurzel-Findung

fixed_point

Skalar-Fixed-Point-Finder

elementweise.find_root

effizienter 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 x0 np.isclose(x, x0, atol=xtol, rtol=rtol) erfüllen, wobei x die exakte Wurzel ist. In Gleichungsform ist diese Abbruchbedingung abs(x - x0) <= xtol + rtol * abs(x0).

Der Standardwert xtol=2e-12 kann zu überraschenden Ergebnissen führen, wenn man erwartet, dass ridder immer Nullstellen mit einer relativen Fehlergenauigkeit nahe der Maschinengenauigkeit berechnet. Es sollte darauf geachtet werden, xtol für den jeweiligen Anwendungsfall auszuwählen. Die Einstellung xtol=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

[Ridders1979] (1,2)

Ridders, C. F. J. „A New Algorithm for Computing a Single Root of a Real Continuous Function.“ IEEE Trans. Circuits Systems 26, 979-980, 1979.

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