Python scipy中时变系数常微分方程
我正在评估一组具有时变系数的常微分方程Python scipy中时变系数常微分方程,python,numpy,scipy,ode,Python,Numpy,Scipy,Ode,我正在评估一组具有时变系数的常微分方程 def deriv(y, t, N, coefficients): S, I, R = y dSdt = coefficients['beta'](t) * S * I / N * -1 dIdt = coefficients['beta'](t) * S * I / N - coefficients['gamma']* I dRdt = coefficients['gamma'] * I return dSdt,
def deriv(y, t, N, coefficients):
S, I, R = y
dSdt = coefficients['beta'](t) * S * I / N * -1
dIdt = coefficients['beta'](t) * S * I / N - coefficients['gamma']* I
dRdt = coefficients['gamma'] * I
return dSdt, dIdt, dRdt
特别是,我在预先计算的数组中有“beta”值,大小等于int(max(t))
当我运行odeint时,它也会对超过max(t)的值进行求值,从而在beta_f中产生索引越界错误。
如何限制odeint的计算范围?由于len(mybetas)==int(max(t))
,即使对于不超过max(t)的t值,您也可以得到越界错误。
例如,mybetas.iloc[int(max(t))]
将给出越界错误,即使int(max(t))
coefficients = {'beta' : beta_f,'gamma':0.1}
def beta_f(t):
return mybetas.iloc[int(t)]
# Initial conditions vector
y0 = (S0, I0, R0)
# Integrate the SIR equations over the time grid, t.
ret = odeint(deriv,y0,t,args=(N,coefficients))