Mam problem z tłumaczeniem mojego kodu MATLAB na Python przez Scipy & Numpy. Utknąłem, jak znaleźć optymalne wartości parametrów (k0 i k1) dla mojego systemu ODE, aby pasowały do moich dziesięciu obserwowanych punktów danych. Obecnie mam wstępne domysły dla k0 i k1. W MATLAB mogę używać czegoś zwanego "fminsearch", które jest funkcją, która przyjmuje system ODE, obserwowane punkty danych i początkowe wartości systemu ODE. Następnie obliczy nową parę parametrów k0 i k1, które będą pasować do obserwowanych danych. Zawarłem mój kod, aby sprawdzić, czy możesz mi pomóc zaimplementować coś w rodzaju "fminsearch", aby znaleźć optymalne wartości parametrów k0 i k1, które będą pasować do moich danych. Chcę dodać dowolny kod, aby to zrobić do mojego pliku lsqtest.py.Dopasowywanie danych do systemu ODE za pomocą Pythona poprzez Scipy & Numpy
Mam trzy pliki .py - ode.py, lsq.py i lsqtest.py
ode.py:
def f(y, t, k):
return (-k[0]*y[0],
k[0]*y[0]-k[1]*y[1],
k[1]*y[1])
lsq.py:
import pylab as py
import numpy as np
from scipy import integrate
from scipy import optimize
import ode
def lsq(teta,y0,data):
#INPUT teta, the unknowns k0,k1
# data, observed
# y0 initial values needed by the ODE
#OUTPUT lsq value
t = np.linspace(0,9,10)
y_obs = data #data points
k = [0,0]
k[0] = teta[0]
k[1] = teta[1]
#call the ODE solver to get the states:
r = integrate.odeint(ode.f,y0,t,args=(k,))
#the ODE system in ode.py
#at each row (time point), y_cal has
#the values of the components [A,B,C]
y_cal = r[:,1] #separate the measured B
#compute the expression to be minimized:
return sum((y_obs-y_cal)**2)
lsqtest .py:
import pylab as py
import numpy as np
from scipy import integrate
from scipy import optimize
import lsq
if __name__ == '__main__':
teta = [0.2,0.3] #guess for parameter values k0 and k1
y0 = [1,0,0] #initial conditions for system
y = [0.000,0.416,0.489,0.595,0.506,0.493,0.458,0.394,0.335,0.309] #observed data points
data = y
resid = lsq.lsq(teta,y0,data)
print resid
Czy tego właśnie szukasz? [scipy fmin] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin.html) – Dhara
Podobnie jak w przypadku niepowiązanej notki, nie musisz używać stylu Matlab jednofunkcyjnego. z plikami o tej samej nazwie w pythonie. – tacaswell