如何修复此错误:TypeError:无法解压缩不可编辑的int对象

2024-10-08 18:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到类型错误:无法解压缩函数S, I, R = y行中的不可iterable int object。我认为将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

Tags: alphareturndefnpmedk2popbeta

热门问题