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))