python如何对多个方程使用eulers方法

python如何对多个方程使用eulers方法,python,differential-equations,Python,Differential Equations,我得到了两个方程式,一个是关于人口中健康人的增长 dh/dt=-.05*h*s+.0003*h, 另一个等式是病人的感染率 ds/dt=.05*h*s-.01*s. 假设感染10天后,患者死亡 对于初始变量h=9000和s=100 使用微分方程生成一个数字,预测感染结果对人群的影响。有人建议使用欧拉方法,我将如何使用欧拉方法使用多重微分方程?或者有没有更好的方法可以推荐以及如何使用?在python中,您会使用,例如,scipy.integrate.odeint和compute def o

我得到了两个方程式,一个是关于人口中健康人的增长

dh/dt=-.05*h*s+.0003*h, 
另一个等式是病人的感染率

ds/dt=.05*h*s-.01*s. 
假设感染10天后,患者死亡

对于初始变量h=9000和s=100


使用微分方程生成一个数字,预测感染结果对人群的影响。有人建议使用欧拉方法,我将如何使用欧拉方法使用多重微分方程?或者有没有更好的方法可以推荐以及如何使用?

在python中,您会使用,例如,
scipy.integrate.odeint
和compute

def odesys(u,t):
    h, s = u
    return [ -.05*h*s+.0003*h, .05*h*s-.01*s]

h0, s0 = 9000, 100
t0, tf = 0, 0.10

t = linspace(t0, tf, 301)
sol = odeint(odesys, [h0, s0], t)
h, s = sol.T
plot(t,h, label="healthy")
plot(t,s, label="sick") 
如果你必须使用Euler,使用相同的界面

def odeinteuler(f, y0, tspan):
     y = zeros([len(tspan),len(y0)])
     y[0,:]=y0
     for k in range(1, len(tspan)):
          y[k,:] = y[k-1,:]+(t[k]-t[k-1])*array(f(y[k-1], t[k-1]))
     return y

sol = odeint(odesys, [h0, s0], t)

t
有什么单位?第二个等式中的-0.01告诉我们,如果没有新的感染发生,72个时间单位后,一半的病人已经死亡。你必须在计算中的某个地方加入10天,还是这是对0.01系数的一个注释?10天是一个注释,至于它在几天内的时间,这没有意义,因为没有新的感染,病人的解决方案是
s(t)=s(0)*exp(-0.01*t)
s(10)=s(0)*exp(-0.1)=0.905
,这意味着10天后,大约10%的病人已经死亡。作为一名现实生活中的参议员,你的常数都来自同一个问题,这是没有意义的。正确地重新缩放了吗?非平凡平衡态为s=0.006和h=0.2。此外,每单位时间内出生3次,10000人似乎有点低。但正如你所说,不现实。h0和s0代表什么?在这段代码中,线sol=odeint(odesys,[h0,s0],t)表示h0和s0未定义,它们应该是什么?这些是h和s的初始值。