fsolve mit Funktion mehrerer Variablen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Ari007
User
Beiträge: 2
Registriert: Mittwoch 11. August 2021, 13:17

Hallo,
ich habe folgendes Problem:

Mit Scipy.optimize.fsolve möchte ich ein nichtlineares Gleichungssystem lösen. Jetzt habe ich folgendes Beispiel auf der Scipy Seite gefunden.

Code: Alles auswählen

from scipy.optimize import fsolve

def func(x):

    return [x[0] * np.cos(x[1]) - 4,

            x[1] * x[0] - x[1] - 5]

root = fsolve(func, [1, 1])

root
array([6.50409711, 0.90841421])

np.isclose(func(root), [0.0, 0.0])  # func(root) should be almost 0.0.
array([ True,  True])
Das klappt auch soweit, nur hängen meine Gleichungen von noch anderen Variablen ab. Stellt euch ein a*x[0] beispielsweise vor. Ich möchte die func Funktion also so schreiben, dass es noch ein a gibt und diese Gleichung dann gelöst wird, wobei a in der Funktion angegeben soll. Was ich nicht weiß, ist, wie der Teil hier aussieht:

Code: Alles auswählen

root = fsolve(func, [1, 1])
wenn der vordere Teil so umgeändert wurde:

Code: Alles auswählen

def func(x, a):

    return [a*x[0] * np.cos(x[1]) - 4,

            x[1] * x[0] - x[1] - 5]
Alternativ dachte ich, ich könnte das alles innerhalb einer anderen Funktion aufrufen, aber ich kann ja schlecht die func-Funktion innerhalb einer anderen Funktion definieren.
Wenn da jemand eine Idee hätte oder mir sagen kann, wie ich die Funktion korrekt anpasse, wäre ich sehr dankbar.

Viele Grüße
Ari
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Ist das `a` fix, oder soll das auch optimiert werden? Wenn fix, dann hilft das args-Argument von fsolve weiter.
Ari007
User
Beiträge: 2
Registriert: Mittwoch 11. August 2021, 13:17

a ist jedesmal fix, wenn ich die Funktion aufrufe.
args-Argument? Da muss ich mal schauen.
Danke für den Hinweis
LG
Antworten