非法使用 ODEINT

计算科学 Python 数字 scipy 麻木的
2021-12-24 04:46:39

给定以下系统:

dPdt=αP(1PK)βPI
dIdt=βPIρI

我如何以数字方式求解系统。当我尝试解决这个问题时,我得到了错误。

/home/gideon/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:19:RuntimeWarning:>除以在double_scalars中遇到的零

/home/gideon/anaconda3/lib/python3.7/site-packages/scipy/integrate/odepack.py:247:>ODEintWarning:检测到非法输入(内部错误)。以 full_output = 1 运行以获得>定量信息。警告.warn(warning_msg, ODEintWarning)

这是我的代码

'''
   x[0]  : P(t). population not infected
   x[1]  : I(t). population Infected
   k     : population carrying capacity
   alpha : growth rate
   rho   : death rate
   beta  : infection rate
   t     : time
'''


t = np.linspace(0,20,50)
fig,ax = plt.subplots(1,figsize = (10,4))
plt.suptitle('Infection Model')

def update_plot(k,alpha,rho,beta):
   ax.clear()

   xprime = lambda x,k,alpha,rho,beta,t: np.array([alpha*x[0]*(1-(x[0]/k))-beta*x[0]*x[1],
                                            beta*x[0]*x[1]-rho*x[1]])
   x0 = np.array([(4/5)*k,k/5])
   x = odeint(xprime,x0,t,args=(k,alpha,rho,beta,))
   y1 = x[:,0]
   y2 = x[:,1]
   ax.plot(t,y1,'b',label = 'P(t)')
   ax.plot(t,y2,'g--',label = 'I(t)')
   plt.legend(loc = 'best')
   plt.show()


k = widgets.FloatSlider(min=1,max = 10 , value =1, description = 'K :')
alpha = widgets.FloatSlider(min=1,max = 10 , value =1, description = r'$\alpha$ :')
rho = widgets.FloatSlider(min=1,max = 10 , value =1, description = r'$\rho$ :')
beta = widgets.FloatSlider(min=1,max = 10 , value =1, description = r'$\beta $ :')

widgets.interactive(update_plot,k=k,alpha=alpha,rho=rho,beta=beta)

我正在尝试绘制系统以获取不同的参数,但我得到的图表不正确。我认为这是由于我在解决方案数组中获得的 nan 值x

1个回答
xprime = lambda x,k,alpha,rho,beta,t:

参数顺序错误,首先是固定参数,然后是参数。

xprime = lambda x,t,k,alpha,rho,beta:

我不确定被零除错误的来源,它可能是解决方案发散的结果,在步长控制器中做奇怪的事情。