scipy.optimize.

bisect#

scipy.optimize.bisect(f, a, b, args=(), xtol=2e-12, rtol=np.float64(8.881784197001252e-16), maxiter=100, full_output=False, disp=True)[Quelle]#

Suche nach der Wurzel einer Funktion in einem Intervall mittels Bisektion.

Standardmäßige Bisektionsroutine zur Suche nach einer Wurzel der Funktion f zwischen den Argumenten a und b. f(a) und f(b) dürfen nicht dasselbe Vorzeichen haben. Langsam, aber sicher.

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 Wurzel x0 erfüllt np.isclose(x, x0, atol=xtol, rtol=rtol), wobei x die exakte Wurzel 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 falsch ist, wird die Wurzel zurückgegeben. Wenn full_output wahr ist, ist der Rückgabewert (x, r), wobei x die Wurzel und r ein RootResults-Objekt ist.

dispbool, optional

Wenn wahr, wird eine RuntimeError ausgelöst, wenn der Algorithmus nicht konvergiert ist. Andernfalls wird der Konvergenzstatus in einem 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
fixed_point

Skalar-Fixed-Point-Finder

fsolve

n-dimensionale Wurzelsuche

elementweise.find_root

effizienter elementweiser 1-D-Wurzelfinder

Hinweise

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 bisect Wurzeln immer mit einem relativen Fehler nahe der Maschinengenauigkeit berechnet. Es sollte darauf geachtet werden, xtol für den jeweiligen Anwendungsfall auszuwählen. Wenn xtol=5e-324, die kleinste Subnormalzahl, gesetzt wird, wird die höchste Genauigkeitsstufe sichergestellt. Größere Werte von xtol können nützlich sein, um Funktionsauswertungen zu sparen, wenn eine Wurzel bei Null liegt oder nahe Null ist, in Anwendungen, bei denen die winzigen absoluten Unterschiede zwischen Gleitkommazahlen nahe Null nicht aussagekräftig sind.

Beispiele

>>> def f(x):
...     return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.bisect(f, 0, 2)
>>> root
1.0
>>> root = optimize.bisect(f, -2, 0)
>>> root
-1.0