[英]How to solve the differential equation?
我想解微分方程
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)
但是当我尝试执行第三个块时,我得到了
类型错误:func() 缺少 3 个必需的位置 arguments:'p'、'K' 和 'alpha'
但是我尝试使用ret = odeint(func, y0, t, args=(p,K, alpha))
但这导致了三条直线,当方程应该返回逻辑曲线时。 如何尝试将r放入参数中,为什么我需要指定 arguments? 我怎样才能得到最终的形状(逻辑曲线)
注:理解参数:Y代表t时刻的累计病例数,r是早期的增长率,K是最终的流行规模。∈[0,1]是一个参数,允许model捕获不同的增长曲线,包括恒定发生率 (=0)、次指数增长 (0<<1) 和指数增长 (=1)。
def func(Y, t, r, p, K, alpha):
return r * (Y ** p) * (1 - (Y / K) ** alpha)
您必须在ODEINT
方法中添加t
参数。
y0 = 0.5 # Your initial condition.
params = (1, 1, 1, 1) # r, p, K, alpha
sol = odeint(func, y0, t, args=params)
从源头上! Scipy ODEINT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.