scipy.optimize.

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), wobei my_args und my_kwargs erforderliche Positions- und Schlüsselwortargumente sind. Anstatt f0 als aufrufbare Funktion zu übergeben, umschließen Sie sie so, dass sie nur x akzeptiert; z. B. übergeben Sie fun=lambda x: f0(x, *my_args, **my_kwargs) als aufrufbare Funktion, wobei my_args (Tupel) und my_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:

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, siehe show_options() für Details.

Rückgabe:
solRootResults

Die Lösung, dargestellt als ein RootResults-Objekt. Wichtige Attribute sind: root die Lösung, converged eine boolesche Flagge, die angibt, ob der Algorithmus erfolgreich beendet wurde, und flag, das den Grund für die Beendigung beschreibt. Siehe RootResults für eine Beschreibung weiterer Attribute.

Siehe auch

show_options

Zusätzliche Optionen, die von den Lösungsalgorithmen akzeptiert werden

root

Finde 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

bisect

x

o

x

o

o

o

o

brentq

x

o

x

o

o

o

o

brenth

x

o

x

o

o

o

o

ridder

x

o

x

o

o

o

o

toms748

x

o

x

o

o

o

o

secant

x

o

x

o

o

o

o

o

newton

x

o

x

o

o

o

o

o

halley

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 brentq nimmt 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 newton nimmt 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)