Python小白的数学建模课-B2. 新冠疫情 SI模型


传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。

SI 模型是最简单的传染病模型,适用于只有易感者和患病者两类人群。

我们就从 SI 模型开始吧,从模型、例程、运行结果到模型分析,全都在这个系列中。

『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛达人。

Python小白的数学建模课-A3.12个新冠疫情数模竞赛赛题及短评
Python小白的数学建模课-B2. 新冠疫情 SI模型
Python小白的数学建模课-B3. 新冠疫情 SIS模型
Python小白的数学建模课-B4. 新冠疫情 SIR模型
Python小白的数学建模课-B5. 新冠疫情 SEIR模型
Python小白的数学建模课-B6. 新冠疫情 SEIR改进模型



1. 前言

新冠疫情不仅严重影响到全球的政治和经济,深刻和全面地影响着社会和生活的方方面面,也已经成为数学建模竞赛的背景帝。

传染病的数学模型是数学建模中的典型问题,标准名称是流行病的数学模型(Mathematical models of epidemic diseases)。建立传染病的数学模型来描述传染病的传播过程,研究传染病的传播速度、空间范围、传播途径、动力学机理等问题,以指导对传染病的有效地预防和控制,具有重要的现实意义。

不同类型传染病的传播具有不同的特点,传染病的传播模型不是从医学角度分析传染病的传播过程,而是按照传播机理建立不同的数学模型。

首先,把传染病流行范围内的人群分为 S、E、I、R 四类,具体含义如下:

  • S 类(Susceptible),易感者,指缺乏免疫能力的健康人,与感染者接触后容易受到感染;

  • E 类(Exposed),暴露者,指接触过感染者但暂无传染性的人,适用于存在潜伏期的传染病;

  • I 类(Infectious),患病者,指具有传染性的患病者,可以传播给 S 类成员将其变为 E 类或 I 类成员;

  • R 类(Recovered),康复者,指病愈后具有免疫力的人。如果免疫期有限,仍可以重新变为 S 类成员,进而被感染;如果是终身免疫,则不能再变为 S类、E类或 I 类成员。

常见的传染病模型按照传染病类型分为 SI、SIR、SIRS、SEIR 模型等,就是由以上四类人群根据不同传染病的特征进行组合而产生的不同模型。




2. 疫情传播 SI 模型

2.1 SI 模型的适用范围

SI 模型适用于只有易感者和患病者两类人群,且无法治愈的疾病,例如 T型病、僵尸。

2.2 SI 模型的假设

  1. 考察地区的总人数 N 不变,即不考虑生死或迁移;
  2. 人群分为易感者(S类)和患病者(I类)两类;
  3. 易感者(S类)与患病者(I类)有效接触即被感染,变为患病者,无潜伏期、无治愈情况、无免疫力;
  4. 每个患病者每天有效接触的易感者的平均人数(日接触数)是 λ\lambdaλ,称为日接触率;
  5. 将第 t 天时 S类、I 类人群的占比记为 s(t)s(t)s(t)i(t)i(t)i(t),数量为 S(t)S(t)S(t)I(t)I(t)I(t);初始日期 t=0t=0t=0 时, S类、I 类人群占比的初值为 s0s_0s0i0i_0i0

2.3 SI 模型的微分方程


Ndidt=NλsiN\frac{di}{dt} = N\lambda s i Ndtdi=Nλsi
得:
didt=λi(1−i),i(0)=i0\frac{di}{dt} = \lambda i (1-i),\ i(0) = i_0 dtdi=λi(1i) i(0)=i0
这是 Logistic 模型,用分离变量法可以求出其解析解为:
i(t)=11+(1/i0−1)e−λtI(t)=Ni(t)i(t)=\frac{1}{1+(1/i_0 - 1)\ e^{-\lambda t}}\\ I(t)= N\ i(t) i(t)=1+(1/i01) eλt1I(t)=N i(t)



3. SI 模型的 Python 编程

3.1 SI 模型的解析解

上文已经得到 SI 模型的解析解,对此很容易通过 Python 编程实现,详见本文例程。

虽然 SI 模型的解析解并不复杂,而且解的精度当然是最好的,但我们仍然不鼓励用解析解的方法。原因在于,一是对于小白求解析解的过程相对复杂困难,而且可能出错,二是对于更复杂的模型是没有解析解的,即便大神也只能用数值方法求解。既然如此,不如从一开始就学习、掌握数值求解方法,熟悉数值解法的编程实现。

3.2 SI 模型的数值解

SI 模型是常微分方程初值问题,可以使用 Scipy 工具包的 scipy.integrate.odeint() 函数求数值解,具体方法可以参考前文《Python小白的数学建模课-09 微分方程模型》。

scipy.integrate.odeint(func, y0, t, args=())

**scipy.integrate.odeint()**是求解微分方程的具体方法,通过数值积分来求解常微分方程组。

odeint() 的主要参数:

  • func: callable(y, t, …)   导数函数 f(y,t)f(y,t)f(y,t) ,即 y 在 t 处的导数,以函数的形式表示
  • y0: array:  初始条件 y0y_0y0,对于常微分方程组 y0y_0y0 则为数组向量
  • t: array:  求解函数值对应的时间点的序列。序列的第一个元素是与初始条件 y0y_0y0 对应的初始时间 t0t_0t0;时间序列必须是单调递增或单调递减的,允许重复值。
  • args: 向导数函数 func 传递参数。当导数函数 f(y,t,p1,p2,..)f(y,t,p1,p2,..)f(y,t,p1,p2,..) 包括可变参数 p1,p2… 时,通过 args =(p1,p2,…) 可以将参数p1,p2… 传递给导数函数 func。

odeint() 的返回值:

  • y: array   数组,形状为 (len(t),len(y0),给出时间序列 t 中每个时刻的 y 值。

odeint() 的编程步骤:

  1. 导入 scipy、numpy、matplotlib 包;
  2. 定义导数函数 f(i,t)=λi(1−i)f(i,t)=\lambda i (1-i)f(i,t)=λi(1i)
  3. 定义初值 i0i_0i0iii 的定义区间 [t0,t][t_0,\ t][t0, t]
  4. 调用 odeint() 求 iii 在定义区间 [t0,t][t_0,\ t][t0, t] 的数值解。

3.3 Python例程:SI 模型的解析解与数值解

# 1. SI 模型,常微分非常,解析解与数值解的比较
from scipy.integrate import odeint  # 导入 scipy.integrate 模块
import numpy as np  # 导入 numpy包
import matplotlib.pyplot as plt  # 导入 matplotlib包def dy_dt(y, t, lamda, mu):  # 定义导数函数 f(y,t)dy_dt = lamda*y*(1-y)  # di/dt = lamda*i*(1-i)return dy_dt# 设置模型参数
number = 1e7  # 总人数
lamda = 1.0  # 日接触率, 患病者每天有效接触的易感者的平均人数
mu1 = 0.5  # 日治愈率, 每天被治愈的患病者人数占患病者总数的比例
y0 = i0 = 1e-6  # 患病者比例的初值
tEnd = 50  # 预测日期长度
t = np.arange(0.0,tEnd,1)  # (start,stop,step)yAnaly = 1/(1+(1/i0-1)*np.exp(-lamda*t))  # 微分方程的解析解
yInteg = odeint(dy_dt, y0, t, args=(lamda,mu1))  # 求解微分方程初值问题
yDeriv = lamda * yInteg *(1-yInteg)# 绘图
plt.plot(t, yAnaly, '-ob', label='analytic')
plt.plot(t, yInteg, ':.r', label='numerical')
plt.plot(t, yDeriv, '-g', label='dy_dt')
plt.title("Comparison between analytic and numerical solutions")
plt.legend(loc='right')
plt.axis([0, 50, -0.1, 1.1])
plt.show()

3.4 解析解与数值解的比较

本图为例程 2.3 的运行结果,图中对解析解(蓝色)与使用 odeint() 得到的数值解(红色)进行比较。在该例中,无法观察到解析解与数值解的差异,表明数值解的误差很小。

图中 di/dtdi/dtdi/dt 具有最大值,最大值表示疫情增长的高潮,达到最大值后 di/dtdi/dtdi/dt 逐渐减小,但患病者比例很快增长到 100%,表明所有人都被感染成为患者。

这是特定参数的结果,还是模型的必然趋势,需要对参数的影响进行更详细的研究。



4. SI 模型参数的影响

对于 SI 模型,只有日接触率 λ\lambdaλ 和患病者比例的初值 i0i_0i0 会影响模型的结果,其它参数如总人数 N 并没有影响。

4.1 日接触率对 SI 模型的影响

对不同日接触率的比较表明:

  1. 日接触率越大,疫情从发生到爆发的时间越短,爆发过程的增长速度也越快。
  2. 不论日接触率多大,患病者的比例最终都会增长到 1,表明所有人都被感染成为患者。
  3. 不论日接触率多大,都具有缓慢发展、爆发、增长放缓 3 个阶段,进入爆发阶段后患病者的比例急剧增长,疫情就很难控制了。

4.2 患病者比例的初值对 SI 模型的影响

对患病者比例初值的比较表明,患病者初值的人数或比例只影响疫情爆发期到来的快慢,对疫情传播的过程和结果几乎没有影响。

这与我们直观的经验不太一致,一个原因是 SI 模型本身存在不足,另一方面也说明如果对传染病不加控制,即使开始患病人数很少,经过一段时间的传播后也终将会引起爆发。

4.3 SI 模型结果讨论

  1. i(t)=0.5,I(t)=N/2i(t)=0.5,\ I(t) = N/2i(t)=0.5, I(t)=N/2 时 $ di/dt$ 达到最大值,病人数目 I(t)I(t)I(t) 增加最快。由此可以预报传染病高潮的到来,即为医院的门诊量最大的一天,卫生部门要重点关注。
  2. tmt_mtmλ\lambdaλ 成反比。日接触率 λ\lambdaλ 反映卫生水平、防控手段,提高卫生水平、强化防控手段,降低病人的日接触率,可以推迟传染病高潮的到来。
  3. t→∞t \to \inftyti→1i \to 1i1 ,表明所有人最终都会被传染而变成病人。这完全不符合实际情况,表明该模型太不讲 politics 了,只能适用于美帝国家建模。
  4. SI 模型非常明显而严重的缺陷,是该模型没有考虑患病者可以治愈,因此只能是健康人患病,而患病者不能恢复健康(甚至也不会死亡,而是不断传播疫情),所以终将全部被传染。

【本节完】

版权声明:

欢迎关注『Python小白的数学建模课 @ Youcans』 原创作品

原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/117740466)。

Copyright 2021 Youcans, XUPT

Crated:2021-06-09


欢迎关注『Python小白的数学建模课 @ Youcans』系列,每周持续更新
Python小白的数学建模课-A1.国赛赛题类型分析
Python小白的数学建模课-A2.2021年数维杯C题探讨
Python小白的数学建模课-A3.12个新冠疫情数模竞赛赛题及短评
Python小白的数学建模课-B2. 新冠疫情 SI模型
Python小白的数学建模课-01.新手必读
Python小白的数学建模课-02.数据导入
Python小白的数学建模课-03.线性规划
Python小白的数学建模课-04.整数规划
Python小白的数学建模课-05.0-1规划
Python小白的数学建模课-06.固定费用问题
Python小白的数学建模课-07.选址问题
Python小白的数学建模课-09.微分方程模型
Python数模笔记-StatsModels 统计回归
Python数模笔记-Sklearn(5)支持向量机
Python数模笔记-NetworkX(5)关键路径法
Python数模笔记-模拟退火算法(4)旅行商问题


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python小白的数学建模课-B3. 新冠疫情 SIS模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SIS 模型型将人群分为 S 类和 I 类,考虑患病者可以治愈而变成易感者,但不考虑免疫期。 本文详细给出了 SIS 模型的建模、例程、运行结果和模型分析…

html里面Meta标签的使用

HTML meta标签使用 先上思维导图,接下来在是文章内容。一、meta标签的组成 meta标签共有两个属性,它们分别是http-equiv属性和name属性,不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页功能。 1、name属性 name属…

Python小白的数学建模课-B4. 新冠疫情 SIR模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SIR 模型将人群分为易感者(S类)、患病者(I类)和康复者(R 类),考虑了患病者治愈后的免疫能…

Python小白的数学建模课-B5. 新冠疫情 SEIR模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 考虑存在易感者、暴露者、患病者和康复者四类人群,适用于具有潜伏期、治愈后获得终身免疫的传染病。 本文详细给出了 SEIR 模型微分方程的建模、例程、结果和分…

Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型

传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI、SIR、SIRS、SEIR 模型。 SEIR 模型考虑存在易感者、暴露者、患病者和康复者四类人群,适用于具有潜伏期、治愈后获得终身免疫的传染病。 本文详细给出了几种改进 SEIR 模型微分方程的思…

iOS里面MVC模式详解

iOS里面MVC模式详解MVC是IOS里面也是很多程序设计里面的一种设计模式,M是model,V是view,C是controller。MVC模式在ios开发里面可谓是用得淋漓尽致。 以下是对斯坦福大学ios开发里面MVC模式的一段话的翻译 主要的宗旨是把所有的对象分为3个阵营…

Python小白的数学建模课-10.微分方程边值问题

小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文。 本文介绍微分方程模型边值问题的建模与求解,不涉及算法推导和编程,只探讨如何使用 Python 的工具包,…

千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路

千帆起航:探索百度千帆AppBuilder在AI原生应用开发中的革新之路 1.揭开帷幕,大模型第二次战役 自从 ChatGPT 横空出世后,一石激起千层浪,人工智能也正在从感知理解走向生成创造,这是一个关键里程碑。生成式大模型完成…

iOS开发里面的4个层次

iOS开发里面的4个层次ios开发具体体现为4个层次,你可以看我下面的思维导图。 Media 虽然是媒体层了,然而还是和硬件比较接近。 Core OS 主要是mach 4.x BSD UNIX 内核,也就是Mac OS 10操作系统,一个在硬件上能执行多任务的UNIX内核…

Python小白的数学建模课-12.非线性规划

非线性规划是指目标函数或约束条件中包含非线性函数的规划问题,实际就是非线性最优化问题。从线性规划到非线性规划,不仅是数学方法的差异,更是解决问题的思想方法的转变。非线性规划问题没有统一的通用方法,我们在这里学习的当然…

小程序真机如何清除订阅数据

在做小程序订阅消息开发的过程中发现,真机上如果是选择了‘总是保持以上选择’,一旦用户授权后,后面就不会再弹出申请改订阅消息的授权弹窗,这对于开发过程中是很不方便的。 曾试过清除缓存,重进小程序也不能清除掉 解…

Python小白的数学建模课-15.图论的基本概念

图论中所说的图,不是图形图像或地图,而是指由顶点和边所构成的图形结构。图论不仅与拓扑学、计算机数据结构和算法密切相关,而且正在成为机器学习的关键技术。本系列结合数学建模的应用需求,来介绍 NetworkX 图论与复杂网络工具包…

swift面向对象之属性

swift面向对象之属性 swift属性存储属性 可以存储常量和变量 惰性存储属性 语法:lazy var 变量 惰性存储属性只有在用的时候才会完成真正的初始化,刚开始的初始化代码只是类型占位,并没有分配存储空间。 比如 class people{ var name:Strin…

Python小白的数学建模课-16.最短路径算法

最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径。在图论中,最短路径长度与最短路径距离却是不同的概念和问题,经常会被混淆。求最短路径长度的常用算法是 Dijkstra 算法、Bellman-Ford 算法和Floyd 算法…

虚拟机(centos)磁盘空间不够

磁盘空间不够 1.关机 2.打开设置-->硬盘 --> 扩展 3.搞定一半 4.开机进入终端 4.1 查看 lsblk 4.2 加起来 growpart /dev/sda 3 注1: 如果 growpart 提示没有的话需要安装一下 yum -y install cloud-utils-growpart 注2:3前面有个空格 4.3 再次…

swift面向对象之方法

swift面向对象之方法 1.下标方法 下标方法仅用于实例,可以在类,结构体,枚举中使用,作用简化类型中的访问方式,注意以下几点 下标方法属于三栖方法,可用于类,结构体和枚举 下标方法的格式为subsc…

Python小白的数学建模课-17.条件最短路径算法

条件最短路径问题,指带有约束条件、限制条件的最短路径问题。例如: 顶点约束,包括必经点或禁止点的限制; 边的约束,包括必经路段、禁行路段和单向路段;无权路径长度的限制,如要求经过几步或不超…

Python小白的数学建模课-18.最小生成树问题

Python小白的数学建模课-18.最小生成树问题 最小生成树(MST)是图论中的基本问题,具有广泛的实际应用,在数学建模中也经常出现。路线设计、道路规划、官网布局、公交路线、网络设计,都可以转化为最小生成树问题&#xf…