python 如何对多个方程使用欧拉法
python how to use eulers method with multiple equations
我得到了两个方程式,一个是人口中健康成长的人,
dh/dt=-.05*h*s+.0003*h,
另一个方程是病人的感染率
ds/dt=.05*h*s-.01*s.
假设人们在感染 10 天后死亡。
对于初始变量 h=9000 和 s=100
使用微分方程生成一个数字,预测感染结果对人口的影响。有人建议使用欧拉法,我如何使用多重微分方程的欧拉法?或者您是否有更好的方法建议以及您将如何使用它?
在 python 中,您将使用,例如,scipy.integrate.odeint
和计算
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)
我得到了两个方程式,一个是人口中健康成长的人,
dh/dt=-.05*h*s+.0003*h,
另一个方程是病人的感染率
ds/dt=.05*h*s-.01*s.
假设人们在感染 10 天后死亡。
对于初始变量 h=9000 和 s=100
使用微分方程生成一个数字,预测感染结果对人口的影响。有人建议使用欧拉法,我如何使用多重微分方程的欧拉法?或者您是否有更好的方法建议以及您将如何使用它?
在 python 中,您将使用,例如,scipy.integrate.odeint
和计算
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)