ich eine allgemeine Funktion, die eine Form einer ODE definiert, die ich plane, beispielsweise zur Integration scipy.integrate.odeint
Verwendung:Passing parametrisierte Funktion Griff in Python
def my_ode(K, tau, y, u):
return K*u/tau - y/tau # dydt
Ich habe mehrere Objekte in meinem Code, der alle Dynamik haben des in my_ode
definierten Formulars, jedoch mit eindeutigen Parametern K
und tau
. Ich würde gerne in der Lage sein, einen einzigartigen Handle zu übergeben my_ode
mit diesen Parametern bereits gesetzt, wenn ich meine Objekte initialisieren, so dass, wenn ich meine Objekte aktualisieren, alles was ich tun muss ist etwas wie für einige Simulationszeit t
.
Zum Beispiel, wenn ich definiere eine Klasse:
class MyThing:
def __init__(self, ode, y0):
# I would rather not maintain K and tau in the objects, I just want the ODE with unique parameters here.
self.ode = ode
self.y = y0
self.time = 0.0
def update(self, t, u):
# I want this to look something like:
self.y = scipy.integrate.odeint(self.ode, t, self.y, u)
Kann ich mit Lambda tue etwas, wenn ich Instanzen MyThing
initialisieren, um grundsätzlich Parameter zuweisen K
und tau
bei der Initialisierung und muß nie wieder passieren? Ich bin ein bisschen fest.
Vielleicht sollten Sie einen Blick nehmen, die [ 'partial'] (https://docs.python.org/3/library/functools .html # functools.partial) Funktion des 'functools' Moduls, kann es in Ihrem Fall nützlich sein. – mgc
Kann ich mein Objekt einfach mit 'thing = MyThing (Lambda t, y, u: mein_ode (K1, tau1, t, y, u), y0)' initialisieren, indem man bei der Initialisierung Werte für 'K1' und' tau1' liefert? Werden diese Werte dann bestehen bleiben? Ich bin noch nicht an einem Ort, wo ich es in meinem Code testen kann. – Engineero