Я получаю TypeError: невозможно распаковать не повторяемый int-объект в строке S, I, R = y
функции. Я думал, что сохранение y в виде матрицы ([730, 3]) решит эту проблему, но этого не произошло.
def SIRmodel(y,t):
S, I, R = y
return ([-alpha*S*I,alpha*S*I-beta*I,beta*I])
Я называю это ниже:
alpha=mygetrand(cdf,0,0.4,1.e-16)
beta = 1/11
t = np.linspace(0,730,1001) #two year time period
pop = 350000000 #population size
med_capacity = 250000
y=np.array([730,3])
x0=0
x1=0.4
def get_trajectory():
infec0 = pop*0.00001 #the initial infected
Iinit = (infec0/pop) #initial infected rate
Sinit = (pop - infec0)/pop #susceptable population
Rinit = 0
sol = rk4sys(SIRmodel,[Sinit,Iinit,Rinit],x0, x1)
hosp = np.zeros(3) #array of hospitalized
perc = [0.05, 0.1, 0.2]
return(sol)
sol = get_trajectory()
plt.plot(t,pop*sol[:,1],'r-',[0,730],[med_capacity,med_capacity],'b:');
#print(pop*soln[:,1])
Проблема здесь в звонок sol = rk4sys(SIRmodel,[Sinit,Iinit,Rinit],x0, x1)
Мой rk4
def rk4sys(f, init, x0, x1):
h=(x0-x1)/730
vx = np.zeros(shape=(730,1))
vy = np.zeros(shape=(731,3))
vx[0] = x = x0 #pythonified assignment statements
vy[0,:] = y = init
for i in range(1, 730 + 1): #runge-kutta loop
k1 = f(x, y)
k2 = f(x + 0.5 * h, y + 0.5 * h* k1)
k3 = f(x + 0.5 * h, y + 0.5 * h* k2)
k4 = f(x + h, y + h* k3)
vx[i] = x = x0 + i * h
vy[i,:] = y = y + h*(k1 + k2 + k2 + k3 + k3 + k4) / 6.
return vx, vy