Jan-16-2018, 12:27 PM
I am new to python, so please bear with me. I am solving a model using odeint function in Python in which I am getting an error: The size of the array returned by func (1) does not match the size of y0 (2)... Maybe I am doing a mistake in returing args in odeint functions. I don't know what is the problem or maybe I am getting the error in wrong direction. Correct me if I am wrong.
from scipy import *
from scipy.integrate import odeint
from operator import itemgetter
import matplotlib
matplotlib.use('Agg')
from matplotlib.ticker import FormatStrFormatter
from pylab import *
import sys
ExpData = [1.0 , 1.1660520579009868 , 1.3688685188071037 , 1.6165891026469563 ,
1.9191557810726714 ]
t_range = arange(0.0,20.0,0.1)
initial_condi = [1,0.5]
VarList = ["a","b"]
ParaList = ["k1","k2"]
k1 = 1
k2 = 2
if len(initial_condi)!=len(VarList):
sys.exit('error')
def odeFunc(Y,t,modelID,t1,t2):
return GenModel(Y,modelID,t1,t2)
def GenModel(Y,modelID,t1,t2):
RetY = [None]
if modelID == 1:
RetY = Y[0] + Y[1]
elif modelID == 2:
RetY = t1*Y[0] + Y[1]
elif modelID == 3:
RetY = Y[0] + t1*Y[1]
if Y[0] == 0 or Y[1] == 0:
if modelID == 27:
RetY = 0
elif modelID == 28:
RetY = 0
if Y[0] != 0 and Y[1] != 0:
if modelID == 27:
RetY = Y[0]*Y[1]
elif modelID ==28:
RetY = t1*Y[0]*Y[1]
elif modelID == 29:
RetY = t2*Y[0]*Y[1]
return RetY
def EvalModelFitness(Stofloat,ExpData):
Sum = 0.0
for i in range(len(Stofloat)):
Sum += (Stofloat[i]-ExpData[i])**2
print Sum/len(Stofloat)
if initial_condi[0] == 0 or initial_condi[1] == 0:
NumModels = 28
else:
NumModels = 39
for j in range(1,NumModels+1):
S = odeint(odeFunc, initial_condi,t_range,args=(j,k1,k2))
Stofloat = S[:,0].astype(type('float',(float,),{}))
EvalModelFitness(Stofloat,ExpData)
