传染病模型SIR及其变体(python版本)

news2024/10/5 23:26:51

文章目录

  • 传染病模型及其变体
    • 1. SI模型
      • 1.1代码
    • 2. SIS模型
      • 2.1 代码
    • 3. 基本再生数 basic reproductive number
    • 4. SIR模型
      • 4.1 代码
    • 5. SEIR模型
      • 5.1 代码
    • 6. SEIJR模型
      • 6.1 代码
    • 7. SEIJRD模型
      • 7.1 代码

传染病模型及其变体

1. SI模型

在该模型里面,群体中只有两种人:易感者和感染者。
感染者每天会感染一定的数量的易感者。
S表示易感者(尚未感染但是容易被感染的人) 的数量
I表示感染者(已经感染的人)的数量
N表示人口总数
r表示一个感染者平均每天感染易感者的人数
那么每天易感者和感染者的数量变化为
d S = − r S I N d I = r S I N \begin{align} dS &= \frac{-rSI}{N} \\ dI &= \frac{rSI}{N} \end{align} dSdI=NrSI=NrSI

1.1代码

import numpy as np   # 科学计算工具包
import matplotlib.pyplot as plt  # 画图工具包

plt.rcParams["font.family"] = 'Arial Unicode MS'  # 用来正常显示中文
# 定义SI函数——根据SI模型计算每天新增的易感人数和感染人数,返回累计人数
def SI(si,dt):
    S,I = si          # 每天初始SI的数值
    dS = -(r*I*S)/N   # 易感者微分方程
    dI = r*I*S/N      # 感染者微分方程
    S = 0 if S+dS*dt<=0 else S+dS*dt      # 当天易感者人数    
    I = N if I+dI*dt>=N else I+dI*dt      # 当天感染者人数
    return [S, I]

def calculate(func,si,days):  
    dt = 1
    t = np.arange(0,days,dt) # 设置时间步
    res = []
    for itm in t:
        si=func(si,dt)      # 运行SI模型函数
        res.append(si)      # 存储每天人数结果
    return np.array(res)

# 画图函数
def plot_graph(np_res): 
    plt.figure(figsize=(10,6),dpi=300)
    plt.plot(np_res[:,0])
    plt.plot(np_res[:,1])
    plt.title("SI模型")
    plt.xlabel("天数")
    plt.ylabel("人数")
    plt.legend(['易感者','感染者'])
    plt.show()
    

N = 10000
I = 1
r = 1
days = 50
si= [N-I,    # 易感人数
       I]    # 感染人数

result = calculate(SI,si,days)
plot_graph(result)

在这里插入图片描述

2. SIS模型

在该模型里面,群体中依然只有两种人:易感者和感染者。

感染者每天会感染一定的数量的易感者,同时每天会有一定数量的感染者康复,但是他们康复之后依然有可能被感染。

S S S表示易感者(尚未感染但是容易被感染的人) 的数量

I I I表示感染者(已经感染的人)的数量

N N N表示人口总数

r r r表示一个感染者平均每天感染易感者的人数

μ \mu μ 表示感染者每天康复的比例

那么每天易感者和感染者的数量变化为

d S = − r S I N + μ I d I = r S I N − μ I \begin{align} dS &= \frac{-rSI}{N} + \mu I\\ dI &= \frac{rSI}{N} - \mu I \\ \end{align} dSdI=NrSI+μI=NrSIμI

2.1 代码

# 定义SIS函数——根据SIS模型计算每天新增的易感人数和感染人数,返回累计人数
def SIS(sis,dt):
    S,I = sis          # 每天初始SI的数值
    dS = -(r*I*S)/N + u*I   # 易感者微分方程
    dI = r*I*S/N - u*I     # 感染者微分方程
    S = 0 if S+dS*dt<=0 else S+dS*dt    # 当天易感者人数
    I = N if I+dI*dt>=N else I+dI*dt    # 当天感染者人数
    return [S, I]

def calculate(func,sis,days):  
    dt = 1
    t = np.arange(0,days,dt) # 设置时间步
    res=[]
    for itm in t:
        sis=func(sis,dt)      # 运行SI模型函数
        res.append(sis)      # 存储每天人数结果
    return np.array(res)

# 画图函数
def plot_graph(np_res): 
    plt.figure(figsize=(10,6),dpi=300)
    plt.plot(np_res[:,0])
    plt.plot(np_res[:,1])
    plt.title("SIS模型")
    plt.xlabel("天数")
    plt.ylabel("人数")
    plt.legend(['易感者','感染者'])
    plt.text(10,4500,'N=%d \nI=%d \nr=%2.1f \nu=%2.1f' % (N,I,r,u), bbox={
   'facecolor': 'red', 'alpha': 0.4, 'pad': 8})
    final = [round(x) for x in result[-1]]  # 取整表示
    plt.text(90,final[0],final[0])
    plt.text(93,final[1],final[1])
    plt.show()

# 赋值绘图
N = 10000
I = 1
r = 0.6
u = 0.2
days = 100

sis= [N-I,    # 易感人数
       I]    # 感染人数

result = calculate(SIS,sis,days)
plot_graph(result)
print(result[-1])

在这里插入图片描述
可以看出,在SIS模型中,并非所有的人都会被感染,最终感染人数为:

I = N ( 1 − u r ) I = N(1-\frac{u}{r}) I=N(1ru)

3. 基本再生数 basic reproductive number

这里,从SIS模型中引出了一个概念,就是基本再生数,其定义为:

R

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

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

相关文章

数据可视化-ECharts Html项目实战(14)

在之前的文章中&#xff0c;我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Html项目实战&#xff08;…

Open-Sora:开源版的Sora

项目简介 本项目希望通过开源社区的力量复现Sora&#xff0c;由北大-兔展AIGC联合实验室共同发起&#xff0c;当前我们资源有限仅搭建了基础架构&#xff0c;无法进行完整训练&#xff0c;希望通过开源社区逐步增加模块并筹集资源进行训练&#xff0c;当前版本离目标差距巨大&…

java多功能手机

随着科技的发展&#xff0c;手机的使用已经普及到每个家庭甚至个人&#xff0c;手机的属性越来越强大&#xff0c;功能也越来越多&#xff0c;因此人们在生活中越来越依赖于手机。 任务要求&#xff0c;使用所学知识编写一个手机属性及功能分析程序设计&#xff0c;测试各个手机…

国产POL8903 LVDS转MIPI带旋转功能方案介绍

一、芯片简介 1、系统 高性能 MIPS 32bit CPU 内核&#xff1a; 高性能 DSP 内核图像处理单元 16KB指令 Cache 16KB数据 Cache 96KB片上 SRAM 内嵌DDR3控制器 2、 LVDS 输入 支持1或者2通道 LVDS 输入 支持最大1920x108060Hz输入 兼容 VESA 和 JEIDA 格式 通道内5条…

「ChatGPT」掀起新一轮AI热潮!超越GPT-4 Turbo,商汤日日新大升级!

目录 拳打 GPT-4 Turbo &#xff0c;脚踢 DALLE 3 端侧大模型&#xff0c;唯快不破 AI 应用落地需要一个即插即用的大模型超市 并不存在 AI 这个行业&#xff0c;只有 AI行业&#xff0c;强调 AI 需要与传统产业合作&#xff0c;这种关系是结合与赋能&#xff0c;而不是颠覆…

设计模式-状态模式在Java中的使用示例-信用卡业务系统

场景 在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c;这些状态在某些情况下能够相互转换&#xff0c;而且对象在不同的状态下也将具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计&#xff0c;我们可以使用一种被称之为状态模式的设计模式…

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Adobe XD 请…

【注解和反射】获取类运行时结构

继上一篇博客【注解和反射】类加载器-CSDN博客 目录 七、获取类运行时结构 测试 getFields()和getDeclaredFields() getMethods()和getDeclaredMethods() 七、获取类运行时结构 获取类运行时结构通常指的是在Java等面向对象编程语言中&#xff0c;使用反射&#xff08;Ref…

【git学习】Git 的基本操作

文章目录 &#x1f680;创建 Git 本地仓库&#x1f680;配置 Git&#x1f680;认识⼯作区、暂存区、版本库&#x1f680;添加⽂件操作 &#x1f680;创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来。 …

谷歌发布基于声学建模的无限虚拟房间增强现实鲁棒语音识别技术

声学室模拟允许在AR眼镜上以最少的真实数据进行训练&#xff0c;用于开发鲁棒的语音识别声音分离模型。 随着增强现实&#xff08;AR&#xff09;技术的强大和广泛应用&#xff0c;它能应用到各种日常情境中。我们对AR技术的潜能感到兴奋&#xff0c;并持续不断地开发和测试新…

web前端框架设计第六课-样式绑定

web前端框架设计第六课-样式绑定 一.预习笔记 1.class属性绑定 给P标签绑定一个类样式&#xff0c;类名为active。当active取值为true时&#xff0c;表示绑定样式成功&#xff0c;取值为false时&#xff0c;取消绑定 以对象形式给P标签绑定多个类样式 以数组形式给P标签绑定多…

网络安全新挑战:通用人工智能(AGI)等级保护指南

通用人工智能&#xff08;AGI&#xff09;的发展现状及趋势 随着2023年大语言模型应用的划时代突破&#xff0c;以ChatGPT为杰出代表的此类技术犹如一股洪流&#xff0c;彻底颠覆了人类与机器智能交互的疆界&#xff0c;引领通用人工智能&#xff08;AGI&#xff09;步入一个崭…

网络基础(day3)建议在电脑端注册登陆观看!!!

【 理论重点】 网络是什么&#xff1f; &#xff08;网络是载体&#xff0c;目的是传输互联网中的数据&#xff0c;数据是终端产生<手机、电脑、服务器等>。&#xff09; 如何组件网络&#xff08;良性网络架构&#xff09;&#xff1f;有网络架构思维&#xff0c;得按层…

宜搜科技死磕港交所上市:从搜索引擎到广告投放,业绩疲态凸显

近日&#xff0c;宜搜科技控股有限公司&#xff08;下称“宜搜科技”&#xff09;向港交所递交招股书&#xff0c;计划在香港主板上市&#xff0c;中银国际为其独家保荐人。 值得注意的是&#xff0c;宜搜科技已在资本市场辗转多年。该公司曾于2014年向纽交所递交上市申请&…

easyExcel快速入门

目录 &#x1f9c2;1.简单介绍 &#x1f32d;2.快速入门 &#x1f953;1.导入依赖 &#x1f37f;2.导出到excel &#x1f38f;3.读入数据 &#x1f389;4.下载 1.简单介绍 传统操作Excel大多都是利用Apach POl进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多…

Github进行fork后如何与原仓库同步

前言 fork了一个仓库以后怎么同步源仓库的代码&#xff1f; 步骤 1、执行命令 git remote -v 查看你的远程仓库的路径。 以一个实际例子说明&#xff0c; 来源仓库&#xff1a; TheFirstLineOfCode/basaltgit remote -v得到&#xff1a; origin https://github.com/ghmi…

Redis之路系列(5)功夫在诗外

5 拓展篇—功夫在诗外 6.0新特性 相对都比较鸡肋&#xff0c;谨慎在生产环境使用 ACL安全策略 Redis6版本推出了ACL(Access Control List)访问控制权限 的功能&#xff0c;基于此功能&#xff0c;可以设置多个用户&#xff0c;并且给每个用户单独设 置命令权限和数据权限。 …

机器学习/算法工程师面试题目与答案-深度学习部分1

机器学习/算法工程师面试题目与答案-深度学习部分 BatchNormalization的作用梯度消失循环神经网络&#xff0c;为什么好?什么是GroupConvolution什么是RNN神经网络中权重共享的是&#xff1f;神经网络激活函数&#xff1f;为什么在深度学习中常进行finetuning画GRU结构图什么是…

python+django校园社交高校交友网站2x7r5.

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中&#xff0c;方便对数据进行操作本课题基于WEB的开发平台&#xff0c;设计的基本思路是&#xff1a; 前端&#xff1a;vue.jselementui 框架&#…

探索Web3:去中心化的互联网新时代

引言 在过去的几十年里&#xff0c;互联网已经改变了我们的生活方式、商业模式以及社交互动方式。然而&#xff0c;一个新的技术浪潮——Web3正在崭露头角&#xff0c;预示着一个去中心化的互联网新时代的来临。本文将深入探讨Web3技术的定义、特点以及其对未来互联网发展的影…