root_scalar#
- scipy.optimize.root_scalar(f, args=(), method=None, bracket=None, fprime=None, fprime2=None, x0=None, x1=None, xtol=None, rtol=None, maxiter=None, options=None)[Quelle]#
Findet eine Wurzel einer skalaren Funktion.
- Parameter:
- faufrufbar
Eine Funktion, um eine Wurzel zu finden.
Angenommen, die aufrufbare Funktion hat die Signatur
f0(x, *my_args, **my_kwargs), wobeimy_argsundmy_kwargserforderliche Positions- und Schlüsselwortargumente sind. Anstattf0als aufrufbare Funktion zu übergeben, umschließen Sie sie so, dass sie nurxakzeptiert; z. B. übergeben Siefun=lambda x: f0(x, *my_args, **my_kwargs)als aufrufbare Funktion, wobeimy_args(Tupel) undmy_kwargs(Dict) vor dem Aufruf dieser Funktion gesammelt wurden.- argstuple, optional
Zusätzliche Argumente, die an die Zielfunktion und ihre Ableitung(en) übergeben werden.
- methodstr, optional
Art des Lösers. Muss eine der folgenden sein:
‘bisect’ (siehe hier)
‘brentq’ (siehe hier)
‘brenth’ (siehe hier)
‘ridder’ (siehe hier)
‘toms748’ (siehe hier)
‘newton’ (siehe hier)
‘secant’ (siehe hier)
‘halley’ (siehe hier)
- bracket: Eine Sequenz von 2 Gleitkommazahlen, optional
Ein Intervall, das eine Wurzel einschließt.
f(x, *args)muss an den beiden Endpunkten unterschiedliche Vorzeichen haben.- x0float, optional
Anfangsschätzung.
- x1float, optional
Eine zweite Schätzung.
- fprimebool oder callable, optional
Wenn fprime ein boolescher Wert ist und True ist, wird angenommen, dass f den Wert der Zielfunktion und der Ableitung zurückgibt. fprime kann auch eine aufrufbare Funktion sein, die die Ableitung von f zurückgibt. In diesem Fall muss sie die gleichen Argumente wie f akzeptieren.
- fprime2bool oder callable, optional
Wenn fprime2 ein boolescher Wert ist und True ist, wird angenommen, dass f den Wert der Zielfunktion und der ersten und zweiten Ableitung zurückgibt. fprime2 kann auch eine aufrufbare Funktion sein, die die zweite Ableitung von f zurückgibt. In diesem Fall muss sie die gleichen Argumente wie f akzeptieren.
- xtolfloat, optional
Toleranz (absolut) für die Beendigung.
- rtolfloat, optional
Toleranz (relativ) für die Beendigung.
- maxiterint, optional
Maximale Anzahl von Iterationen.
- optionsdict, optional
Ein Dictionary von Solver-Optionen. Z.B.
k, sieheshow_options()für Details.
- Rückgabe:
- solRootResults
Die Lösung, dargestellt als ein
RootResults-Objekt. Wichtige Attribute sind:rootdie Lösung,convergedeine boolesche Flagge, die angibt, ob der Algorithmus erfolgreich beendet wurde, undflag, das den Grund für die Beendigung beschreibt. SieheRootResultsfür eine Beschreibung weiterer Attribute.
Siehe auch
show_optionsZusätzliche Optionen, die von den Lösungsalgorithmen akzeptiert werden
rootFinde eine Wurzel einer Vektorfunktion.
Hinweise
Dieser Abschnitt beschreibt die verfügbaren Solver, die mit dem Parameter ‘method’ ausgewählt werden können.
Standardmäßig wird die beste Methode für die vorliegende Situation verwendet. Wenn ein Intervall angegeben ist, kann eine der Intervallmethoden verwendet werden. Wenn eine Ableitung und ein Anfangswert angegeben sind, kann eine der ableitungsbasierten Methoden ausgewählt werden. Wenn keine Methode als anwendbar beurteilt wird, wird eine Ausnahme ausgelöst.
Die Argumente für jede Methode sind wie folgt (x=erforderlich, o=optional).
method
f
args
bracket
x0
x1
fprime
fprime2
xtol
rtol
maxiter
options
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
x
o
x
o
o
o
o
o
x
o
x
o
o
o
o
o
x
o
x
x
x
o
o
o
o
Beispiele
Findet die Wurzel eines einfachen kubischen Polynoms
>>> from scipy import optimize >>> def f(x): ... return (x**3 - 1) # only one real root at x = 1
>>> def fprime(x): ... return 3*x**2
Die Methode
brentqnimmt als Eingabe ein Intervall>>> sol = optimize.root_scalar(f, bracket=[0, 3], method='brentq') >>> sol.root, sol.iterations, sol.function_calls (1.0, 10, 11)
Die Methode
newtonnimmt als Eingabe einen einzelnen Punkt und verwendet die Ableitung(en).>>> sol = optimize.root_scalar(f, x0=0.2, fprime=fprime, method='newton') >>> sol.root, sol.iterations, sol.function_calls (1.0, 11, 22)
Die Funktion kann den Wert und die Ableitung(en) in einem einzigen Aufruf bereitstellen.
>>> def f_p_pp(x): ... return (x**3 - 1), 3*x**2, 6*x
>>> sol = optimize.root_scalar( ... f_p_pp, x0=0.2, fprime=True, method='newton' ... ) >>> sol.root, sol.iterations, sol.function_calls (1.0, 11, 11)
>>> sol = optimize.root_scalar( ... f_p_pp, x0=0.2, fprime=True, fprime2=True, method='halley' ... ) >>> sol.root, sol.iterations, sol.function_calls (1.0, 7, 8)