bracket#
- scipy.optimize.bracket(func, xa=0.0, xb=1.0, args=(), grow_limit=110.0, maxiter=1000)[Quelle]#
Klammert das Minimum einer Funktion ein.
Sucht ausgehend von einer Funktion und zwei unterschiedlichen Anfangspunkten in Richtung des Gefälles (definiert durch die Anfangspunkte) und gibt drei Punkte zurück, die das Minimum der Funktion einklammern.
- Parameter:
- funccallable f(x,*args)
Zielfunktion zur Minimierung.
- xa, xbfloat, optional
Anfangspunkte. Standardmäßig xa auf 0.0 und xb auf 1.0 gesetzt. Ein lokales Minimum muss nicht unbedingt in diesem Intervall enthalten sein.
- argstuple, optional
Zusätzliche Argumente (falls vorhanden), die an func übergeben werden.
- grow_limitfloat, optional
Maximale Wachstumsbegrenzung. Standardwert ist 110.0
- maxiterint, optional
Maximale Anzahl von Iterationen, die durchgeführt werden sollen. Standardwert ist 1000.
- Rückgabe:
- xa, xb, xcfloat
Endpunkte der Klammer.
- fa, fb, fcfloat
Funktionswerte am Klammerpunkt.
- funcallsint
Anzahl der durchgeführten Funktionsaufrufe.
- Löst aus:
- BracketError
Wenn vor Beendigung des Algorithmus keine gültige Klammer gefunden wird. Siehe Hinweise für Bedingungen einer gültigen Klammer.
Hinweise
Der Algorithmus versucht, drei streng geordnete Punkte zu finden (d.h. \(x_a < x_b < x_c\) oder \(x_c < x_b < x_a\)), die \(f(x_b) ≤ f(x_a)\) und \(f(x_b) ≤ f(x_c)\) erfüllen, wobei eine der Ungleichungen streng erfüllt sein muss und alle \(x_i\) endlich sein müssen.
Beispiele
Diese Funktion kann eine abwärts konvexe Region einer Funktion finden
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.optimize import bracket >>> def f(x): ... return 10*x**2 + 3*x + 5 >>> x = np.linspace(-2, 2) >>> y = f(x) >>> init_xa, init_xb = 0.1, 1 >>> xa, xb, xc, fa, fb, fc, funcalls = bracket(f, xa=init_xa, xb=init_xb) >>> plt.axvline(x=init_xa, color="k", linestyle="--") >>> plt.axvline(x=init_xb, color="k", linestyle="--") >>> plt.plot(x, y, "-k") >>> plt.plot(xa, fa, "bx") >>> plt.plot(xb, fb, "rx") >>> plt.plot(xc, fc, "bx") >>> plt.show()
Beachten Sie, dass beide Anfangspunkte rechts vom Minimum lagen und der dritte Punkt in Richtung des "Gefälles" gefunden wurde – der Richtung, in der die Funktion abnahm (nach links). Die Endpunkte sind streng geordnet, und der Funktionswert am mittleren Punkt ist kleiner als die Funktionswerte an den Endpunkten; daraus folgt, dass ein Minimum innerhalb der Klammer liegen muss.