Python 如何解微分方程?

Python 如何解微分方程?,python,statistics,differential-equations,curve,odeint,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 但是当我尝试执行第三个块时,我得到 TypeError:func()缺少3个必需的位置参数:“p”、“K”和“alpha” 但是我尝试使用ret=odeint(func,y0,t

我想解微分方程

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
但是当我尝试执行第三个块时,我得到

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

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

注:为了解参数:Y表示t时的累计病例数,r表示早期的增长率,K表示最终的疫情规模。
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)

从源头上

您好,您可以尝试使用
ret=odeint(lambda y0,t:func(t,*y0),y0,t)
?有效吗?我尝试使用lambda交换参数的顺序并解包其他参数。
def func(Y, t, r, p, K, alpha):
    return r * (Y ** p) * (1 - (Y / K) ** alpha)
y0 = 0.5 # Your initial condition.
params = (1, 1, 1, 1) # r, p, K, alpha
sol = odeint(func, y0, t, args=params)