I’m simulating a model with 8 states using DifferentialEquations
and get the expected result:
[Red line is simulation; scatter plot is experimental values.]
Next, I double the model by simulating two identical models (16 states) which are individually independent. When I re-do the simulation, there is a deviation:
These results are from Jupyter notebook. I get the same results if I run the code in VC. I have tried to reduce reltol
and abstol
, without any effect.
Here is the ODE for the first plot:
function mod1!(dx,x,p,t)
S,E,I,C,A,R,CC,xm = x
k0_i,k_e,k_ca,eta,k_r,tm,Tm,N,u = p
k_i = k0_i*xm
k_c = eta*k_ca
k_a = (1-eta)*k_ca
#
dS = -k_i*(I+A)*S/N
dE = k_i*(I+A)*S/N - k_e*E
dI = k_e*E - k_ca*I
dC = k_c*I - k_r*C
dA = k_a*I - k_r*A
dR = k_r*(C+A)
dCC = k_c*I
dxm = (u(t+tm) - xm)/Tm
dx .= [dS,dE,dI,dC,dA,dR,dCC,dxm]
end
In this model, u
is an ConstantInterpolation
function. I call the function as follows:
x0 = [S0,E0,I0,C0,A0,R0,CC0,xm0]
#
p = [k0_i,k_e,k_ca,eta,k_r,tm,Tm,N,u]
#
prob = ODEProblem(mod1!,x0,tspan,p)
sol = solve(prob)
The model for the second plot is:
function mod2!(dx,x,p,t)
S,E,I,C,A,R,CC,xm,S2,E2,I2,C2,A2,R2,CC2,xm2 = x
k0_i,k0_i2,k_e,k_ca,eta,k_r,tm,Tm,tm2,Tm2,N,u,N2,u2 = p
k_i = k0_i*xm
k_i2 = k0_i2*xm2
k_c = eta*k_ca
k_a = (1-eta)*k_ca
#
dS = -k_i*(I+A)*S/N
dE = k_i*(I+A)*S/N - k_e*E
dI = k_e*E - k_ca*I
dC = k_c*I - k_r*C
dA = k_a*I - k_r*A
dR = k_r*(C+A)
dCC = k_c*I
dxm = (u(t+tm) - xm)/Tm
#
dS2 = -k_i2*(I2+A2)*S2/N2
dE2 = k_i2*(I2+A2)*S2/N2 - k_e*E2
dI2 = k_e*E2 - k_ca*I2
dC2 = k_c*I2 - k_r*C2
dA2 = k_a*I2 - k_r*A2
dR2 = k_r*(C2+A2)
dCC2 = k_c*I2
dxm2 = (u2(t+tm2) - xm2)/Tm2
#
dx .= [dS,dE,dI,dC,dA,dR,dCC,dxm,dS2,dE2,dI2,dC2,dA2,dR2,dCC2,dxm2]
end
I call the function as follows:
x0 = [S0,E0,I0,C0,A0,R0,CC0,xm0,S0,E0,I0,C0,A0,R0,CC0,xm0]
#
p = [k0_i,1.5*k0_i,k_e,k_ca,eta,k_r,tm,Tm,tm,Tm,N,u,N,u]
#
tin = 0.
tfin = 245
tspan = (tin,tfin)
prob = ODEProblem(mod2!,x0,tspan,p)
sol = solve(prob)
Observe that in mod2!
, the two models (S
… xm
, and S2
… xm2
) are (i) identical, and (ii) independent of each other. The only difference when simulating them is that for the second part of mod2!
, I change parameter k0_i
by multiplying it with 1.5
.
If I set k0_i2 = k0_i
, then I get the correct result for the simulation, but since the models are independent, I should get the same result no matter what k0_i2
is??
Question: What am I doing wrong??
[I can provide a full set of code, if necessary, but it is rather lengthy.]