Ho una funzione generale che definisce una forma di ODE che progetto integrare usando scipy.integrate.odeint
, ad esempio:Passando parametrizzato maniglia funzione in Python
def my_ode(K, tau, y, u):
return K*u/tau - y/tau # dydt
Ho parecchi oggetti nel mio codice che hanno tutti dinamiche del modulo definito in my_ode
, ma con parametri univoci K
e tau
. Mi piacerebbe essere in grado di passare un handle unico a my_ode
con quei parametri già impostati quando inizializzo i miei oggetti, in modo che quando aggiorno i miei oggetti, tutto ciò che devo fare è qualcosa come per qualche tempo di simulazione t
.
Per esempio, se io definisco una classe:
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)
Posso fare qualcosa con Lambda quando ho inizializzare istanze di MyThing
assegnare fondamentalmente parametri K
e tau
in fase di inizializzazione e mai bisogno di passare di nuovo? Sono un po 'bloccato.
Forse si dovrebbe dare un'occhiata a Il [ 'partial'] (https://docs.python.org/3/library/functools .html # functools.partial) funzione del modulo 'functools', potrebbe essere utile nel tuo caso. – mgc
Posso solo inizializzare il mio oggetto con 'thing = MyThing (lambda t, y, u: my_ode (K1, tau1, t, y, u), y0)', fornendo i valori per 'K1' e' tau1' all'inizializzazione? Questi valori persisteranno? Non sono ancora in un posto dove posso testarlo nel mio codice. – Engineero