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的初始值。