繁体   English   中英

如何求解微分方程?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM