我想求解微分方程
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)和指数增长(?= 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