首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SEIR模型的相轨迹

SEIR模型的相轨迹

作者头像
裴来凡
发布2022-05-29 10:33:52
发布2022-05-29 10:33:52
6050
举报
代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
plt.rcParams['font.sans-serif']=['SimHei']
def dySEIR(y,t,lamda,delta,mu):#SEIR 模型,导数函数
    s,e,i=y
    ds_dt=-lamda*s*i# ds/dt=-lamda*s*i
    de_dt=lamda*s*i-delta*e#de/dt=lamda*s*i-delta*e
    di_dt=delta*e-mu*i#di/dt=delta*e-mu*i
    return np.array([ds_dt,de_dt,di_dt])
#设置模型参数
number=1e6#总人数
lamda=0.25#日接触率, 患病者每天有效接触的易感者的平均人数
delta=0.1#日发病率,每天发病成为患病者的潜伏者占潜伏者总数的比例
mu=0.1#日治愈率, 每天治愈的患病者人数占患病者总数的比例
sigma=lamda/mu#传染期接触数
tEnd=600#预测日期长度
t=np.arange(0.0,tEnd,1)
e0List=np.arange(0.01,0.4,0.05)
for e0 in e0List:
    #odeint 数值解
    i0=0#潜伏者比例的初值
    s0=1-i0-e0#易感者比例的初值
    ySEIR=odeint(dySEIR,(s0,e0,i0),t,args=(lamda,delta,mu))#SEIR模型
    plt.plot(ySEIR[:,1],ySEIR[:,2]) 
    print("lamda={}\tdelta={}\mu={}\tsigma={}\ti0={}\te0={}".format(lamda,delta,mu,lamda/mu,i0,e0))
# 绘图
plt.title("SEIR模型的相轨迹: e(t)~i(t)")
plt.axis([0,0.4,0,0.4])
plt.plot([0,0.4],[0,0.35],'#ffc0cb')
plt.plot([0,0.4],[0,0.18],'#ffc0cb')
plt.text(0.02,0.36,r"$\lambda=0.25, \delta=0.1, \mu=0.1$",color='black')
plt.xlabel('e(t)')
plt.ylabel('i(t)')
plt.show()

算法:SEIR模型的相轨迹是每一条e-s曲线从直线 i(t)+s(t)=1上的某一初值点出发最终收敛于s轴上的某一点对应着某一个初值条件下的患病者与易感者比例随时间的变化关系。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档