Как я могу исправить эту ошибку: TypeError: не удается распаковать не повторяющийся объект int - PullRequest
1 голос
/ 08 мая 2020

Я получаю 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

1 Ответ

1 голос
/ 08 мая 2020

Поменять местами значения t и y в вызове SIRmodel def SIRmodel(t,y):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...