Die kurze Antwort lautet: G
wird vom Optimierer im Rahmen des Minimierungsprozesses beibehalten, während die (D_neg, D, and C)
Argumente werden unverändert vom übergeben args
Tupel.
Standardmäßig, scipy.optimize.minimize
übernimmt eine Funktion fun(x)
das akzeptiert ein Argument x
(das ein Array oder ähnliches sein kann) und gibt einen Skalar zurück. scipy.optimize.minimize
findet dann einen Argumentwert xp
so dass fun(xp)
ist weniger als fun(x)
für andere Werte von x
.Der Optimierer ist für die Erstellung von Werten verantwortlich x
und sie weitergeben fun
zur Auswertung.
Aber was ist, wenn Sie zufällig eine Funktion haben? fun(x, y)
das hat einige zusätzliche Parameter y
das muss separat übergeben werden (wird aber für die Zwecke der Optimierung als Konstante betrachtet)?Das ist es, was die args
Tupel ist für.Der Dokumentation versucht zu erklären, wie das args-Tupel verwendet wird, aber es kann etwas schwierig zu analysieren sein:
Argumente: Tupel, optional
Zusätzliche Argumente, die an die Zielfunktion und ihre Ableitungen übergeben werden (Jakobianisch, Hessisch).
Effektiv, scipy.optimize.minimize
wird alles passieren, was drin ist args
wie der Rest der Argumente zu fun
, unter Verwendung der Sternchen-Argumentnotation:Die Funktion wird dann aufgerufen als fun(x, *args)
während der Optimierung.Der x
Der Teil wird vom Optimierer übergeben, und der args
Als verbleibende Argumente wird das Tupel angegeben.
In Ihrem Code ist also der Wert von G
Das Element wird vom Optimierer beibehalten, während mögliche Werte von ausgewertet werden G
, und das (D_neg, D, C)
Tupel wird unverändert übergeben.