import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import linalg
from scipy.integrate import odeint
sns.set()
%matplotlib inline
Ni = 100*1e-3
Ci = 2*1e-6
F_3n = Ni**2.5/(Ni**2.5 + (17*1e-3)**2.5)
K_con1 = 0.1*1e-6
K_con2 = 20
K_coff1 = 0.05*1e-6
K_coff2 = 0.3
K_12 = 0.2
K_43 = 0.1
K_inact1 = 0.2
K_inact2 = 25*K_inact1
k = {"Ni": Ni,"Ci":Ci, "F_3n": F_3n,\
"K_con1": K_con1,"K_con2":K_con2,\
"K_coff1":K_coff1,"K_coff2": K_coff2,\
"K_12": K_12,"K_43":K_43,"K_inact1": K_inact1,\
"K_inact2": K_inact2}
k
{'Ni': 0.1, 'Ci': 2e-06, 'F_3n': 0.9882245384948203, 'K_con1': 1e-07, 'K_con2': 20, 'K_coff1': 5e-08, 'K_coff2': 0.3, 'K_12': 0.2, 'K_43': 0.1, 'K_inact1': 0.2, 'K_inact2': 5.0}
F3n=Ni2.5Ni2.5+172.5
dF1dt=F4CiKcon1−F1Kcoff1+F2F3nKinact1−F1K12
dF2dt=F3CiKcon2−F2Kcon2+F1K12−F2F3nKinact1
dF3dt=F2Kcoff2+F4K43−F3CiKcon2−F3F3nKinact2
F4=1−F1−F2−F3
dF1dt=CiKcon1−F1(Kcoff1+CiKcon1+K12)+F2(F3nKinact1−CiKcon1)−F3CiKcon1
dF2dt=F1K12−F2(Kcon2+F3nKinact1)+F3CiKcon2
dF3dt=K43−F1K43+F2(Kcoff2−K43)−F3(CiKcon2+F3nKinact2+K43)
# function that returns dy/dt
def model(y,t,k):
'''y[0] = F1,
y[1] = F2,
y[2] = F3,
'''
dy1dt = k["Ci"]*k["K_con1"] \
- y[0]*(k["K_coff1"]+k["Ci"]*k["K_con1"]+k["K_12"])\
+ y[1]*(k["F_3n"]*k["K_inact1"]-k["Ci"]*k["K_con1"])\
- y[2]*k["Ci"]*k["K_con1"]
dy2dt = y[0]*k["K_12"] \
-y[1]*(k["K_con2"]+k["F_3n"]*k["K_inact1"])\
+y[2]*k["Ci"]*k["K_con2"]
dy3dt = k["K_43"]\
-y[0]*k["K_43"]\
+y[1]*(k["K_coff2"]-k["K_43"])\
-y[2]*(k["Ci"]*k["K_con2"]+k["F_3n"]*k["K_inact2"]+k["K_43"])
dydt = [dy1dt,dy2dt,dy3dt]
return dydt
N = 1
T = 50
y0 = [1,0,0]
t = np.linspace(0,T)
'''solve ODEs'''
y = odeint(model,y0,t,args=(k,))
y1 = np.empty_like(t)
y2 = np.empty_like(t)
y3 = np.empty_like(t)
y4 = np.empty_like(t)
I = np.empty_like(t)
for i in range(len(t)):
y1[i] = y[i][0]
y2[i] = y[i][1]
y3[i] = y[i][2]
y4[i] = 1 - y1[i] - y2[i] - y3[i]
I[i] = y2[i]*F_3n
y1[T-1],y2[T-1],y3[T-1],y4[T-1],I[T-1]
(5.014955054667541e-05, 5.407977907554697e-07, 0.019835680478156214, 0.9801136291735063, 5.344296471883424e-07)
# plot results
plt.figure(figsize = [15,5])
plt.plot(t,y1,linewidth=2,label='F1')
plt.plot(t,y2,linewidth=2,label='F2')
plt.plot(t,y3,linewidth=2,label='F3')
plt.plot(t,y4,linewidth=2,label='F4')
plt.xlabel('time')
plt.ylabel('y(t)')
plt.legend()
plt.show()
# plot results
plt.figure(figsize = [15,5])
plt.plot(t,I,linewidth=2,label='I')
plt.xlabel('time')
plt.ylabel('y(t)')
plt.legend()
plt.show()
PTC = [{"Ni":0*1e-3,"Ci": 2*1e-6},\
{"Ni":100*1e-3,"Ci": 2*1e-6},\
{"Ni":0*1e-3,"Ci": 0*1e-6},\
{"Ni":100*1e-3,"Ci": 0*1e-6},\
{"Ni":0*1e-3,"Ci": 0*1e-6},\
{"Ni":100*1e-3,"Ci": 2*1e-6},\
{"Ni":100*1e-3,"Ci": 0*1e-6},\
{"Ni":100*1e-3,"Ci": 2*1e-6},\
{"Ni":100*1e-3,"Ci": 0*1e-6},\
{"Ni":0*1e-3,"Ci": 2*1e-6},\
{"Ni":100*1e-3,"Ci": 0*1e-6},\
{"Ni":0*1e-3,"Ci": 0*1e-6},\
{"Ni":100*1e-3,"Ci": 0*1e-6},\
{"Ni":0*1e-3,"Ci": 0*1e-6},\
{"Ni":100*1e-3,"Ci": 2*1e-6},\
{"Ni":0*1e-3,"Ci": 0*1e-6}]
PTCt = [{"Ni":0*1e-3,"Ci": 2*1e-6},\
{"Ni":100*1e-3,"Ci": 2*1e-6},\
{"Ni":0*1e-3,"Ci": 0*1e-6}]
len(PTC)
16
Tc = 50
TT = [i*Tc for i in range(len(PTC))]
plt.figure(figsize = [10,8])
for i,T in enumerate(TT):
ptc = PTC[i]
Ni = ptc['Ni']
Ci = ptc['Ci']
F_3n = Ni**2.5/(Ni**2.5 + (17*1e-3)**2.5)
K_con1 = 0.1*1e-6
K_con2 = 20
K_coff1 = 0.05*1e-6
K_coff2 = 0.3
K_12 = 0.2
K_43 = 0.1
K_inact1 = 0.2
K_inact2 = 25*K_inact1
k = {"Ni": Ni,"Ci":Ci, "F_3n": F_3n,\
"K_con1": K_con1,"K_con2":K_con2,\
"K_coff1":K_coff1,"K_coff2": K_coff2,\
"K_12": K_12,"K_43":K_43,"K_inact1": K_inact1,\
"K_inact2": K_inact2}
y0 = [1,0,0]
t = np.linspace(T,T+Tc)
'''solve ODEs'''
y = odeint(model,y0,t,args=(k,))
y1 = np.empty_like(t)
y2 = np.empty_like(t)
y3 = np.empty_like(t)
y4 = np.empty_like(t)
I = np.empty_like(t)
for i in range(len(t)):
y1[i] = y[i][0]
y2[i] = y[i][1]
y3[i] = y[i][2]
y4[i] = 1 - y1[i] - y2[i] - y3[i]
I[i] = y2[i]*F_3n
y0 = [y1[Tc-1],y2[Tc-1],y3[Tc-1]]
'''Plot the simulation'''
plt.plot(t,I,linewidth=2,label='I-'+str(T))
plt.xlabel('time')
plt.ylabel('y(t)')
plt.legend()
plt.show()