[SciPy-user] Getting the set of parameters from a leastsq function at each iteration.
Doreen Mbabazi
doreen at aims.ac.za
Fri Apr 4 13:01:49 EDT 2008
Hi,
I am still working at my code and I have not yet been able to get optimal
parameters. The problem being that actually my fitting function which is a
system of odes is evaluated at only one set of parameters(the initial)
thus the final results I get is the initial set of parameters. I need to
find a way to be able to find integrate the system of odes at each
iteration as the set of parameters change. In other words, Is there a way
to get the parameters at each iteration while using the leastsq function?
If that is possible how can I integrate my system of odes using these sets
of parameters at each iteration? Some help please.
Code is below.
from scipy import *
from scipy.integrate import odeint
from scipy.optimize import leastsq
import scipy.io.array_import
import Gnuplot,Gnuplot.funcutils
gp=Gnuplot.Gnuplot(persist=1) # , debug=1
def residuals(p,V,t):
err = V - S(t,p)
return err
#y[0]=T, y[1]=T*, y[2] = V, lamda = p[0], d = p[1], k=p[2], delta=p[3], pi
= p[4], c = p[5]
initial_y = [10,0,10e-6] # initial conditions T(0)= 10cells , T*(0)=0,
V(0)=10e-6
filename=('essay1.dat') # data file is stored
data = scipy.io.array_import.read_array(filename) # data file is read.
t = data[:,0]
V = data[:,1]
pname = (['lamda','d','k','delta','pi','c'])
lamda_0 = 0.1; d_0 = 0.01; k_0 = 0.60e-3; delta_0 = 0.35; pi_0 = 800;
c_0 = 3.0
p = array([lamda_0 , d_0, k_0, delta_0,pi_0,c_0])
def f(y,t,p):
y_dot = [0.,0.,0.]
y_dot[0] = p[0] - p[1]*y[0] - p[2]*y[0]*y[2]
y_dot[1] = p[2]*y[0]*y[2] - p[3]*y[1]
y_dot[2] = p[4]*y[1] - p[5]*y[2]
return y_dot
y = odeint(f,initial_y,t,args=(p,))
def S(t,p):
v = y[:,2]
return v
pbest = leastsq(residuals, p, args=(V,t),maxfev=2000)
print pbest[0]
Doreen.
Rob Clewley
> Hi Doreen,
>
>> def residuals(p,y,t):
>> return [V - S(t,p) for i in xrange(len(t))]
>>
>
> Minpack expects an array type to be returned. You're returning a
> python list. So try this:
>
> def residuals(p,y,t):
> return array([V - S(t_val,p) for t_val in t])
>
> Here I've also removed the unnecessary i index variable -- Python lets
> you iterate directly over the contents of the list t.
>
> -Rob
>
> --
> Robert H. Clewley, Ph. D.
> Assistant Professor
> Department of Mathematics and Statistics
> Georgia State University
> 720 COE, 30 Pryor St
> Atlanta, GA 30303, USA
>
> tel: 404-413-6420 fax: 404-651-2246
> http://www.mathstat.gsu.edu/~matrhc
> http://brainsbehavior.gsu.edu/
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-user
>
More information about the SciPy-User
mailing list