Python:SEIR传染病模型

article/2025/9/25 12:16:52

Hello,大家好!好久没有更新了,今天给大家介绍一个非常经典的模型——SEIR传染病模型!

SEIR传染病模型

  • 模型介绍
    • S、E、I、R代表的含义
    • 模型建立
      • 变量解释
      • 建立微分方程
      • 转化迭代形式
  • Python实现
  • 总结
  • 获得源代码

模型介绍

传染病的基本数学模型,研究传染病的传播速度、空间范围、传播途径、动力学机理等问题,以指导对传染病的有效地预防和控制。常见的传染病模型按照传染病类型分为 SI、SIR、SIRS、SEIR 模型等,按照传播机理又分为基于常微分方程、偏微分方程、网络动力学的不同类型。

S、E、I、R代表的含义

S、E、I、R是传染病流行范围内的四类人群:易感者(Susceptible)、暴露者(Exposed)、感染者(Infectious)、康复者(Recovered)

类型解释
易感者(Susceptible)未得病者,但缺乏免疫能力,与感染者接触后容易受到感染
暴露者(Exposed)接触过感染者,但暂无能力传染给其他人的人,对潜伏期长的传染病适用
感染者(Infectious)染上传染病的人,可以传播给 S 类成员,将其变为 E 类或 I 类成员
康复者(Recovered)被隔离或因病愈而具有免疫力的人。如免疫期有限,R 类成员可以重新变为 S 类

注:有些文章里面对于R的解释会用抵抗者(Resistant)来解释,会将死亡人群也划分在R中。

模型建立

变量解释

变量解释
S S S易感者人数
E E E潜伏者人数
I I I感染者人数
R R R康复者人数
r 1 r_1 r1每个感染者每天接触的平均人数
r 2 r_2 r2每个潜伏着每天接触的平均人数
β 1 \beta_1 β1易感者被感染者感染的概率
β 2 \beta_2 β2易感者被潜伏者感染的概率
α \alpha α潜伏者转化为感染者的概率(潜伏期的倒数)
γ \gamma γ康复概率
N N N总人数

建立微分方程

d S d t = − r 1 β I S N − r 2 β 2 E S N d E d t = r 1 β 1 I S N + r 2 β 2 E S N − α E d I d t = α E − γ I d R d t = γ I \frac{dS}{dt}=-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N}\\ \frac{dE}{dt}=\frac{r_1\beta_1IS}{N}+\frac{r_2\beta_2ES}{N}-\alpha E\\ \frac{dI}{dt}=\alpha E-\gamma I\\ \frac{dR}{dt}=\gamma I dtdS=Nr1βISNr2β2ESdtdE=Nr1β1IS+Nr2β2ESαEdtdI=αEγIdtdR=γI

转化迭代形式

d S d t = − r 1 β I S N − r 2 β 2 E S N \frac{dS}{dt}=-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N} dtdS=Nr1βISNr2β2ES为例

d S d t = − r 1 β I S N − r 2 β 2 E S N \frac{dS}{dt}=-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N} dtdS=Nr1βISNr2β2ES
左右两边求积分
∫ n − 1 n d S d t d t = ∫ n − 1 n ( − r 1 β I S N − r 2 β 2 E S N ) d t \int_{n-1}^{n}\frac{dS}{dt}dt=\int_{n-1}^{n}(-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N})dt n1ndtdSdt=n1n(Nr1βISNr2β2ES)dt
等号右边使用左矩形公式( ∫ a b f ( x ) d x ≈ ( b − a ) f ( a ) \int_a^bf(x)dx\approx(b-a)f(a) abf(x)dx(ba)f(a)
S n − S n − 1 = − r 1 β 1 I n − 1 S n − 1 N − r 2 β 2 E n − 1 S n − 1 N S_{n}-S_{n-1}=-\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}-\frac{r_2\beta_2 E_{n-1}S_{n-1}}{N} SnSn1=Nr1β1In1Sn1Nr2β2En1Sn1
整理得
S n = S n − 1 − r 1 β 1 I n − 1 S n − 1 N − r 2 β 2 E n − 1 S n − 1 N S_{n}=S_{n-1}-\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}-\frac{r_2\beta_2 E_{n-1}S_{n-1}}{N} Sn=Sn1Nr1β1In1Sn1Nr2β2En1Sn1

同理可得
S n = S n − 1 − r 1 β 1 I n − 1 S n − 1 N − r 2 β 2 E n − 1 S n − 1 N E n = E n − 1 + r 1 β 1 I n − 1 S n − 1 N + r 2 β 2 E n − 1 S n − 1 N − α E n − 1 I n = I n − 1 + α E n − 1 − γ I n − 1 R n = R n − 1 + γ I n − 1 S_{n}=S_{n-1}-\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}-\frac{r_2\beta_2 E_{n-1}S_{n-1}}{N}\\ E_{n}=E_{n-1}+\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}+\frac{r_2\beta_2E_{n-1}S_{n-1}}{N}-\alpha E_{n-1}\\ I_{n}=I_{n-1}+\alpha E_{n-1}-\gamma I_{n-1}\\ R_{n}=R_{n-1}+\gamma I_{n-1} Sn=Sn1Nr1β1In1Sn1Nr2β2En1Sn1En=En1+Nr1β1In1Sn1+Nr2β2En1Sn1αEn1In=In1+αEn1γIn1Rn=Rn1+γIn1

Python实现

首先,定义S、E、I、R四类人群,并设置初始人数:

N = 96400000  # 人口总数
E = []  # 潜伏携带者
E.append(0)
I = []  # 传染者
I.append(17)
S = []  # 易感者
S.append(N - I[0])
R = []  # 抵抗者
R.append(0)

设置各参数的初始值:

r = 21  # 传染者接触人数
b = 0.048  # 传染者传染概率
a = 0.13  # 潜伏者患病概率
r2 = 21  # 潜伏者接触人数
b2 = 0.048  # 潜伏者传染概率
y = 0.066  # 康复概率
T = [i for i in range(0, 160)]  # 时间

利用迭代公式计算每一天四类群体的人数:

for i in range(0, len(T) - 1):S.append(S[i] - r * b * S[i] * I[i] / N - r2 * b2 * S[i] * E[i] / N)E.append(E[i] + r * b * S[i] * I[i] / N - a * E[i] + r2 * b2 * S[i] * E[i] / N)I.append(I[i] + a * E[i] - y* I[i])R.append(R[i] + y * I[i])

最后,可视化来看下模拟的效果*(完整代码已封装,文末关注公众号即可获得)*:

if __name__ == "__main__":T = [i for i in range(160)]s = SEIR(T, 96400000, 0, 17, 0, 21, 21, 0.048, 0.048, 0.13, 0.066)s.plot()

在这里插入图片描述

总结

传染病模型是一个非常经典的模型,不仅可以用在疾病的传播模拟上,经济领域、网络舆情传播等都可以使用。并且本文仅仅做了最简单的建模,里面的各类参数的设定都可以根据具体问题或实际情况,做更优的调整。

获得源代码

关注公众号,回复“SEIR”即可获得源代码,谢谢大家支持!
在这里插入图片描述


http://chatgpt.dhexx.cn/article/VVRp31Tr.shtml

相关文章

经典的传染病模型简介 + SIS情况分析

传染病模型简介 SIS情况分析 简介各类经典传染病模型(基础形式)SIS模型假设符号说明微分方程组模型结论 经典传染病模型的缺陷 简介 研究传染病模型,对社会经济和维持秩序有重大意义,尤其在过去的2020年,新冠疫情爆发…

传染病模型

参考:https://www.zhihu.com/question/367466399?fromgroupmessage 假定人群分为4种,分别是: SUSCEPTIBLES:易感者,潜在的可感染人群。EXPOSED:潜伏者,已经被感染没有表现出来的人群。INFECTIVES&#xf…

微分方程传染病模型之指数模型-SI模型-SIS模型-SIR模型

传染病(瘟疫)经常在世界各地流行,如霍乱、天花、艾滋病、SARS、新型冠状病毒、H5N1病毒等,建立传染病的数学模型,分析其变化规律,防止其蔓延是一项艰巨的任务,这里就一般的传染规律讨论传染病的…

数学模型:传染病模型

传染病模型 需要考虑的问题基本方法模型1模型2(SI模型)模型3(SIS模型)模型4(SIR模型) 需要考虑的问题 描述传染病的传播过程分析受感染人数的变化规律预报传染病高潮到来的时刻预防传染病蔓延的手段 基本…

传染病模型知识储备

一、模型中的人群分类 S (Susceptible),易感者,指缺乏免疫能力健康人,与感染者接触后容易受到感染; E (Exposed),暴露者 ,指接触过感染者但暂无传染性的人,可用于存在潜伏期的传染病&#xff…

传染病模型-SIR

一、模型背景 传染病模型指传染病的基本数学模型,主要研究传染病的传播速度、空间范围、传播途径、动力学机理等问题,以指导对传染病的有效地预防和控制。常见的传染病模型按照传染病类型分为 SI、SIR、SIRS、SEIR 模型,本文着重介绍其中的SI…

C语言用函数、递归的方法求n的阶乘

函数fac代码 当n<1时&#xff0c;结果为1 当n>1时&#xff0c;n只要乘前一个n的阶乘值就是n的阶乘&#xff0c;即&#xff1a;n*fac(n-1) int fac(int n) {if(n<1)return 1;elsereturn n*fac(n-1); } 主函数代码 int main() {int n0;int ret0;scanf("%d&quo…

通过C语言实现函数的递归 ---自己调用自己

Hellow&#xff0c;我是jack&#xff0c;今天给大家分享的是C语言实现函数的递归调用。 在使用递归调用时&#xff0c;我们应明白以下几点&#xff1a; 1.存在限制条件 限制条件不存在时&#xff0c;不在递归 2.递归越来越接近结尾 3.递归层次不能太深 注意这几点就是让我们在…

C++语言基础--递归函数

对于很多编程初学者来说&#xff0c;递归算法是学习语言的最大障碍之一。可能也有一大部分人知道递归&#xff0c;也能看的懂递归&#xff0c;但在实际做题过程中&#xff0c;却不知道怎么使用 递归的定义 1、很官方的说法 递归&#xff0c;在数学与计算机科学中&#xff0c;…

11.函数(C语言)+递归函数(超清晰图解递归)

函数 1.函数是什么&#xff1f;2.库函数1&#xff09;库函数的基本知识2&#xff09;初识几个库函数 3.自定义函数自定义函数的组成 4.函数参数1 )实际参数&#xff08;实参&#xff09;&#xff1a;2) 形式参数&#xff08;形参&#xff09;&#xff1a; 5.函数调用1) 传值调用…

C语言之函数递归

前言   从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&#xff0c;正在给小和尚讲故事呢&#xff01;故事是什么呢&#xff1f;"从前有座山&#xff0c;山里有座庙&#xff0c;庙里有个老和尚&#xff0c;正在给小和尚讲故事呢&#xff01;故事是什么呢&…

C语言——函数递归

文章目录 前言递归的概念递归的两个必要条件例题1.递归实现阶乘2.递归实现strlen函数3.计算一个正整数各位数字的和4.递归实现整数n的整数k次方5.递归实现斐波那契数6.递归实现字符串逆序7.汉诺塔8.青蛙跳台阶9.将一个十进制数以二进制的形式打印 前言 本文总结了几个递归基础例…

C语言的递归函数

递归函数&#xff08;一&#xff09; 递归就是一个函数在它的函数体内调用它自身。 执行递归函数将反复调用其自身&#xff0c;每调用一次就进入新的一层。 注意递归函数必须有结束条件 递归函数&#xff08;二&#xff09; 5的阶乘这个例子进行一下剖析&#xff0c;看一看他…

函数递归调用(c语言为例)

定义:在调用一个函数的过程中又出现直接或间接调用该函数本身&#xff0c;称为函数的递归调用。 int fun(int x){return fun(x2);//在执行f函数的过程中又要调用f函数 } 在调用函数f的过程中&#xff0c;又要调用f函数&#xff0c;这是直接调用本函数&#xff0c;如图1 图 1 如…

【C语言】函数递归(详解)

文章目录 函数递归什么是递归&#xff1f;递归的俩个必要条件代码引例1栈溢出&#xff08;Stack Overflow&#xff09; 合理使用递归代码引例3代码引例4解释要合理使用递归 结束语 函数递归 程序调用自身的编程技巧称为递归 recursion&#xff09; 函数自己调用自己就是递归 …

php熔断,微服务-API熔断原理

伴随微服务&#xff0c;出现了很多新鲜的名词&#xff0c;其实剥去外衣并没有那么高大上。 今天要谈到的&#xff0c;叫做”熔断”&#xff0c;一个典型的开源实现是Hystrix(JAVA实现)。 背景 一个分布式系统中&#xff0c;服务间互相调用错综复杂&#xff0c;假设某个基础服务…

接口熔断 java_SpringCloud(五):服务熔断与熔断监控

一、概念部分 1.什么是熔断器? 熔断,就是断开与服务器的连接,熔断器是在服务不可用的时候主动断开,以免造成更多的雪崩效应,他是保护服务高可用的最后一道防线。 2.为什么需要熔断器? 为保证服务高可用,最先想到的是服务集群,但集群并不能完全的保证服务高可用, 当某个…

分布式系统服务熔断

# 服务熔断 - “熔断器”本身是一种开关装置&#xff0c;当某个服务单元发生故障之后&#xff0c;通过断路器(hystrix)的故障监控&#xff0c;某个异常条件被触发&#xff0c;直接熔断整个服务。向调用方法返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或…

微服务熔断

https://mp.weixin.qq.com/s/cxd0Fol4BBzx4v2qm-hlwQ 我这篇文章来的晚了些&#xff0c;因为hystrix已经进入维护模式。但已经有非常多的同学入坑了&#xff0c;那么本篇文章就是及时雨。本文将说明熔断使用的一些注意事项&#xff0c;可能会细的让你厌烦。 前半段&#xf…

【服务熔断】服务熔断完整说明

文章目录 1.创始人文档2.熔断机制3.原理总结4.断路器打开之后5.服务监控hystrixDashboarda.七色b.一圈c.一线d.单个图说明e.多个图说明 1.创始人文档 大神文档 2.熔断机制 熔断机制概述 熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用…