Seite 1 von 1

fsolve mit Funktion mehrerer Variablen

Verfasst: Mittwoch 11. August 2021, 13:26
von Ari007
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

Re: fsolve mit Funktion mehrerer Variablen

Verfasst: Mittwoch 11. August 2021, 19:31
von Sirius3
Ist das `a` fix, oder soll das auch optimiert werden? Wenn fix, dann hilft das args-Argument von fsolve weiter.

Re: fsolve mit Funktion mehrerer Variablen

Verfasst: Mittwoch 11. August 2021, 19:36
von Ari007
a ist jedesmal fix, wenn ich die Funktion aufrufe.
args-Argument? Da muss ich mal schauen.
Danke für den Hinweis
LG