如何求解微分方程?

时间:2020-07-11 19:14:45

标签: python statistics differential-equations curve odeint

我想求解微分方程

dydt = r * (Y ** p) * (1 - (Y / K) ** alpha) 

我试图写如下代码:

def func(Y, r, p, K, alpha):
    dydt = r * (Y ** p) * (1 - (Y / K) ** alpha)
    return dydt
t = np.linspace(0, len(df), len(df))

# I used 1 to initialize my parameters ( is there a better way ?)
r = 1; p = 1; K = 1; alpha = 1 

y0 = r,p,K,alpha
ret = odeint(func, y0, t)

但是当我尝试执行第三个块时,我得到了

TypeError:func()缺少3个必需的位置参数:“ p”,“ K”和“ alpha”

但是我尝试使用 ret = odeint(func, y0, t, args=(p,K, alpha)) 但是,当方程式应该返回对数曲线时,这导致了三个直线。 如何尝试在参数中加入 r 以及为什么需要指定参数?如何获得最终形状(逻辑曲线)

注:要了解参数:Y代表时间t的累计病例数,r是早期阶段的增长率,K是最终的流行病规模。?∈[0,1]是允许该模型捕获不同的增长曲线,包括恒定发生率(?= 0),次指数增长(0

1 个答案:

答案 0 :(得分:1)

def func(Y, t, r, p, K, alpha):
    return r * (Y ** p) * (1 - (Y / K) ** alpha)

您必须在t方法中添加ODEINT参数。

y0 = 0.5 # Your initial condition.
params = (1, 1, 1, 1) # r, p, K, alpha
sol = odeint(func, y0, t, args=params)

从源头开始! bootstrapcdn