在公共卫生研究中,数学模型是理解传染病传播规律的重要工具。通过数值模拟,我们能直观看到 “易感人群” 和 “感染人群” 随时间的变化趋势,甚至能预测疫情发展的关键节点。今天就带大家用 MATLAB 实现两个经典的传染病模型 ——SI 模型SIS 模型,一步步拆解代码逻辑,还会教你如何替换自己的数据,让模型更贴合你的研究场景哦~ 🌟

一、为什么要做传染病模型模拟? 🤔

想象一下:当一种新的传染病出现时,卫生部门需要快速判断 “多久会出现感染高峰?”“最终会有多少人被感染?” 这些问题光靠经验很难回答,但数学模型能帮我们 “预演” 不同场景下的传播过程。

今天要实现的两个模型,虽然简单却蕴含着传播的核心逻辑:

  • SI 模型:假设感染后不会康复,只会在易感人群中持续扩散(比如某些终身携带的病毒);
  • SIS 模型:感染后会康复,且康复者会重新成为易感人群(比如流感这类可重复感染的疾病)。

通过可视化这两个模型的结果,我们能清晰看到 “康复” 这个变量对传播趋势的巨大影响~

二、模型原理:从公式到逻辑 📝

在写代码前,先让我们看懂两个模型的数学表达式 —— 这是理解模拟逻辑的关键哦!

1. SI 模型:“一旦感染,终身携带”

SI 模型里有两个核心人群:

  • S(t):t 时刻的易感人群(可能被感染的人);
  • I(t):t 时刻的感染人群(已感染且具有传染性的人)。

总人数 N = S (t) + I (t)(因为没有康复,所以总人数不变)。

模型的微分方程如下:

\( \begin{cases} \dfrac{dS}{dt} = -\beta \dfrac{S \times I}{N} \\ \dfrac{dI}{dt} = \beta \dfrac{S \times I}{N} \end{cases} \)

公式解读:

  • \( \beta \) 是传染率(比如 β=0.2 表示每个感染者每天平均会让 20% 的易感者被感染);
  • \( \frac{S \times I}{N} \) 代表 “易感者与感染者的接触概率”(总人数 N 固定时,接触次数和两者数量的乘积成正比);
  • 因此,易感人群的减少量 \( \frac{dS}{dt} \) 等于感染人群的增加量 \( \frac{dI}{dt} \),符合 “无康复” 的设定~

2. SIS 模型:“康复后仍可能再感染”

SIS 模型在 SI 模型的基础上增加了 “康复” 环节:感染人群会以一定概率康复,且康复后重新成为易感者(所以叫 SIS,Susceptible-Infected-Susceptible)。

新增参数 \( \gamma \) 代表康复率(比如 γ=0.25 表示每天有 25% 的感染者会康复)。

模型的微分方程如下:

\( \begin{cases} \dfrac{dS}{dt} = -\beta \dfrac{SI}{N} + \gamma I \\ \dfrac{dI}{dt} = \beta \dfrac{SI}{N} - \gamma I \end{cases} \)

公式解读:

  • 感染人群的变化(dI/dt)由两部分组成:新增感染(\( \beta SI/N \))和康复减少(\( -\gamma I \));
  • 易感人群的变化(dS/dt)也对应两部分:因感染减少(\( -\beta SI/N \))和因康复增加(\( +\gamma I \));
  • 这个模型更贴近现实中 “可重复感染” 的疾病(比如普通感冒、流感),感染高峰会因康复而回落~

三、MATLAB 代码实现:从公式到可视化 💻

接下来我们用 MATLAB 的ode45函数(常微分方程求解器)来模拟这两个模型。ode45能帮我们求解微分方程组的数值解,再结合plot函数就能画出人群变化曲线啦~

1. SI 模型代码解析

先看第一段代码 —— 没有康复率的 SI 模型:


% 模型参数N = 1000000; % 总人数I0 = 10; % 初始感染人数S0 = N - I0; % 初始易感人数beta = 0.2; % 传染率num_days = 160; % 模拟天数% x(1):感染人群I, x(2):易感人群Sdxdt = @(t, x) [beta * x(1) * x(2) / N; % dIdt-beta * x(1) * x(2) / N % dSdt];[t, y] = ode45(dxdt, 1: num_days, [I0, S0]);hold onplot(t, y(:, 1));plot(t, y(:, 2));legend('感染人数I', '易感人数S');
关键参数说明(这些都能自定义哦!):
  • N:总人数(比如模拟一个城市的人口,可替换为 500000、10000 等);
  • I0:初始感染人数(疫情刚开始时的病例数,可替换为 5、20 等);
  • S0:初始易感人数(总人数减去初始感染人数,会随N和I0自动变化,也可手动修改);
  • beta:传染率(值越大传播越快,可替换为 0.1、0.3 等);
  • num_days:模拟天数(想观察 1 年就设为 365,想观察 1 个月就设为 30)。
微分方程定义:

dxdt是一个匿名函数,用来定义微分方程组:

  • 第一行beta * x(1) * x(2) / N对应dI/dt(感染人数的变化率),和 SI 模型公式完全一致;
  • 第二行-beta * x(1) * x(2) / N对应dS/dt(易感人数的变化率),负号表示易感者因感染而减少。
求解与绘图:
  • [t, y] = ode45(dxdt, 1: num_days, [I0, S0]):ode45会在 1 到num_days天内求解方程组,初始值是[I0, S0](初始感染和易感人数);
  • y(:, 1)是每天的感染人数(I),y(:, 2)是每天的易感人数(S);
  • plot函数画出两条曲线,legend添加标签,方便区分~

2. SIS 模型代码解析

再看第二段代码 —— 加入康复率的 SIS 模型:


% 模型参数N = 1000000; % 总人数I0 = 10; % 初始感染人数S0 = N - I0; % 初始易感人数beta = 0.2; % 传染率gamma = 0.05; % 康复率num_days = 160; % 模拟天数% x(1):感染人群I, x(2):易感人群Sdxdt = @(t, x) [beta * x(1) * x(2) / N - gamma * x(1); %dIdt-beta * x(1) * x(2) / N + gamma * x(1) %dSdt];[t, y] = ode45(dxdt, 1: num_days, [I0, S0]);hold onplot(t, y(:, 1));plot(t, y(:, 2));legend('感染人数I', '易感人数S');
新增参数(可自定义!):
  • gamma:康复率(值越大表示康复越快,可替换为 0.1、0.5 等)。比如 gamma=0.5 意味着每天有 50% 的感染者会康复~
微分方程变化:

和 SI 模型相比,dxdt的定义多了gamma相关项:

  • 感染人数变化(dI/dt):beta * x(1)*x(2)/N - gamma * x(1)(新增感染减去康复减少,对应 SIS 模型公式);
  • 易感人数变化(dS/dt):-beta * x(1)*x(2)/N + gamma * x(1)(感染减少加上康复增加,和公式一致)。

四、模拟结果分析:曲线背后的传播规律 🔍

运行两段代码后,我们会得到两条截然不同的曲线 —— 这就是模型参数对传播趋势的影响,超直观!

1. SI 模型的曲线特征

在 SI 模型中(无康复):

  • 感染人数(I)会从初始的 10 人开始,随着时间快速增长(因为没有康复,每个感染者都在持续传染易感者);
  • 易感人数(S)会不断减少,直到几乎所有易感者都被感染(因为总人数固定,I+S=N);
  • 曲线趋势:I 呈 “J 型增长”,S 呈 “反向 J 型下降”,最终 I≈N,S≈0(除非初始易感者耗尽)。

这很像 “一旦感染终身携带” 的疾病(比如某些病毒携带者),只要有易感者存在,感染就会持续扩散~ 😮

2. SIS 模型的曲线特征

在 SIS 模型中(有康复):

  • 感染人数(I)会先快速上升(新增感染 > 康复),达到一个 “感染高峰”;
  • 随着易感人数减少、康复人数增加,感染人数会逐渐下降,最终可能稳定在一个平衡值(I 不再变化);
  • 易感人数(S)会先减少后回升,最终和 I 形成动态平衡(因为康复者会回到易感人群)。

这更贴近现实中 “可康复且重复感染” 的场景:比如流感,冬天感染人数上升,春天因康复和抵抗力增强而下降,但来年可能再次流行~ 🌦️

3. 关键差异对比

模型

感染人数趋势

易感人数趋势

核心原因

SI 模型

持续增长至 N

持续下降至 0

无康复,感染不可逆

SIS 模型

先增后减至平衡值

先减后增至平衡值

康复者回归易感人群

五、自定义数据指南:让模型更贴近你的研究 🧪

想模拟自己关注的场景?只需修改几个参数就行!以下是 “可替换数据” 的详细指南,新手也能轻松上手~

1. 必改参数清单

参数名

含义

推荐修改范围

修改后影响示例

N

总人数

1000~10^7(根据场景)

N=10000(模拟一个小镇),传播速度会更快

I0

初始感染人数

1~100

I0=1(零号病人),初期增长会更慢

beta

传染率

0.01~1(越小越慢)

beta=0.1(低传染),感染高峰会推迟

gamma

康复率(仅 SIS 模型)

0.05~1(越大康复越快)

gamma=0.5(高康复),感染高峰会降低

num_days

模拟天数

30~365

num_days=365(模拟一年),看长期趋势

2. 进阶玩法:对比不同参数的影响

比如想研究 “传染率高低对疫情的影响”:

  • 保持 N=1000000,I0=10,gamma=0.25(仅 SIS),num_days=160;
  • 分别用 beta=0.1、0.2、0.3 运行 SIS 模型,会发现 beta 越大,感染高峰越高、出现越早~

再比如研究 “康复率的作用”:

  • 固定 beta=0.2,尝试 gamma=0.1(康复慢)和 gamma=0.5(康复快),会看到康复越快,感染高峰越低、回落越快~

六、总结:模型是工具,思考是核心 🧠

通过今天的模拟,我们不仅学会了用 MATLAB 实现传染病模型,更理解了 “传染率”“康复率” 这些参数如何影响传播趋势:

  • SI 模型适合模拟 “终身感染” 的场景,帮我们理解 “无干预下的最坏情况”;
  • SIS 模型适合模拟 “可康复且重复感染” 的疾病,能预测感染高峰和平衡状态。

但要注意:现实中的传染病传播还受 “隔离措施”“疫苗接种”“人口流动” 等因素影响(这些可以在模型中加入更多参数扩展,比如 SIR 模型)。今天的模型是基础,后续可以不断添加变量,让模拟更精准~

最后,鼓励大家多动手修改参数:试着模拟 “一个学校的流感传播”(N=1000,beta=0.3,gamma=0.4),或者 “一个城市的慢病毒传播”(N=500000,beta=0.05,无 gamma),你会发现数学模型的魅力就在这些细节里~ 🌈

如果运行代码时遇到问题,或者有新的模型想法,欢迎在评论区交流哦!让我们一起用代码探索更多传播规律~ 😊

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

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

相关文章

Ruby如何采集直播数据源地址

在当今数字化的时代,实时获取并处理信息变得尤为重要。特别是在体育赛事、新闻报道等领域,及时获取最新的直播数据源对于提升用户体验至关重要。本文将介绍如何使用Ruby语言来采集特定网站的数据源地址 一、准备工作 首先,确保你的环境中已…

【fitz+PIL】PDF图片文字颜色加深

文章目录0 引言1 解决思路及流程1.1 思路1.2 代码实现2 完整代码与效果3 总结0 引言 没错,这是连续剧。女友对上一篇【fitzOpenCV】去除PDF图片中的水印得到的去水印效果很满意,于是问我可不可以再帮她处理一下另一个PDF文件,我二话不说答应…

tp8.0\jwt接口安全验证

环境&#xff1a;php8.3\tp8.1\firebase-jwt6.1app\middleware\JwtAuth<?php namespace app\middleware;use app\common\library\JwtHandler; use think\Request; use think\facade\Env;class JwtAuth {public function handle(Request $request, \Closure $next){// 获取当…

ReactNative【实战系列教程】我的小红书 5 -- 文章详情(含轮播图 ImageSlider,点亮红心动画 Heart,嵌套评论等)

最终效果 安装依赖 npm i dayjs用于对时间进行格式化 必备组件 轮播图 ImageSlider https://blog.csdn.net/weixin_41192489/article/details/149224510 点亮红心动画 Heart components/Heart.tsx import AntDesign from "expo/vector-icons/AntDesign"; import …

哔哩哔哩第三方TV-BBLL最新版

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VOUtUcaymd9rpgurgDKS9pswA1?pwdp76n# 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOUtUcaymd9rpgurgDKS9pswA1?pwdp76n# 【百款黑科技】&#xff1a;https://uc…

用YOLOv5系列教程(1)-用YOLOv5轻松实现设备状态智能监控!工业级教程来了

用YOLOv5轻松实现设备状态智能监控&#xff01;工业级教程来了设备运维革命&#xff1a;15分钟教会你的摄像头看懂指示灯状态工业现场各种设备状态指示灯是工程师的"眼睛"——红灯报警、绿灯运行、黄灯待机。但人工巡检耗时费力&#xff0c;关键故障容易漏检&#xf…

笔记-分布式计算基础

Distributed Computing 划分数据并行&#xff08;DataParallelism&#xff09;将数据分为n份&#xff0c;发送到n个GPU上&#xff0c;每个GPU上都存在一个完整的大模型 缺点&#xff1a; 模型太大Pipeline Parallelism&#xff08;串行的&#xff09;将模型做split,每个GPU负责…

Android Studio 2024,小白入门喂饭级教程

一、下载Android Studio 1、从安卓官网安卓官网下载Android Studio。 ​ ​ 二、安装Android Studio 1、双击android-studio-2024.3.2.15-windows.exe。 ​ ​​ ​ ​ ​ ​ 三、新建工程 1、双击桌面图标​ 打开Android Studio。 ​ 选“Empty Views Activity…

AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)

目录 一、整体工作流设计 二、制作工作流 2.1 开始节点 2.2 大模型-单词 2.3 大模型_图像生成 2.4 输出 2.5 图像生成_1 2.6 输出_2 2.7 画板_2 2.8 文本处理 2.9 输出_3 2.10 speech_synthesis_1x5 2.11 get_audio_duration_1 2.12 代码 2.13 get_audio_durati…

质量属性场景(Quality Attribute Scenario)深度解析

本质定义:质量属性场景(Quality Attribute Scenario)是精确描述软件系统质量要求的结构化方法,通过标准化的场景模板将抽象的质量属性转化为可测量、可验证的具体行为描述,为架构设计提供客观评估基准。 一、质量属性场景核心结构 1. 六元组标准模板 #mermaid-svg-AGbvPVRu…

Java_Springboot技术框架讲解部分(一)

首先讲解一下&#xff1a;Java技术栈中&#xff0c;目前Spring Boot在国内的关注趋势也日渐超过Spring。Spring Boot是Spring家族中的一个全新的框架&#xff0c;它用来简化Spring应用程序的创建和开发过程。采用Spring Boot可以非常容易和快速的构建基于Spring框架的应用程序&…

从OpenMV到执行器:当PID算法开始“调教”舵机

如果到现在还不会驱动舵机——朋友&#xff0c;电赛的元器件清单每年都在对你“明示”&#xff0c;二维云台都快成祖传考题了&#xff01;补课&#xff1f;现在&#xff01;立刻&#xff01;&#xff08;当然&#xff0c;如果你脸皮够厚&#xff0c;也可以私信骚扰作者&#xf…

xml映射文件的方式操作mybatis

映射文件 在Java spring中使用mybatis有两种方式&#xff0c;一种是注释的方式&#xff0c;一种是xml映射文件的方式。在简单的功能需求可以使用注释&#xff0c;方便简洁。而在大的功能逻辑上&#xff0c;更推荐使用xml映射文件&#xff0c;方便管理且结构清晰。 首先xml文件结…

Carla自动驾驶仿真_快速安装与运行Carla

大家好&#xff0c;我是橙子&#xff0c;今天给大家介绍Carla的基础安装和使用 目录 1.Carla介绍 2.Carla的安装与使用 3.Carla0.9.15安装包下载&#xff1a; ​编辑 4.运行Demo 5.运行一个简单场景&#xff1a; 6.相关资源 1.Carla介绍 Carla 是一个开源的自动驾驶仿…

远程登录docker执行shell报错input is not a terminal问题

背景 最近要远程去k8s docker里面获取信息&#xff0c;于是&#xff0c;写了一个如下的命令&#xff0c;执行完之后&#xff0c;报错了。 ssh 192.168.100.2 sudo crictl exec -it xxx.docker /usr/bin/lscpu --online --extended错误信息如下&#xff1a; time“2025-07-11T21…

使用FastAdmin框架开发二

继上一篇使用FastAdmin框架开发-CSDN博客教程 部署完项目后我们就可以边开发边调试了 在开发前我们可以先做一些基本设置 安装成功后会生成一个项目后台的地址http://域名/VrHGtzlfMB.php/index/login&#xff0c;后台入口文件是随机生成的&#xff0c;当然我们也可以根据我…

【DB2】load报错SQL3501W、SQL3109N、SQL2036N

最近老遇到迁移测试LOAD时报错&#xff0c;如图所示但是换成import又可以看描述是说load的内容将不会进入备份暂挂状态balbala… 下面的错误是说ixf文件无效 这里一直以为是SQL3501W的问题&#xff0c;去各种研究load参数和db2set里面的load参数&#xff0c;各种调整都不行 又以…

YOLO家族内战!v5/v8/v10谁才是你的真命天子?(附保姆级选择指南)

在目标检测领域&#xff0c;YOLO系列始终是工业部署与学术研究的焦点。从风靡全网的YOLOv5&#xff0c;到全面升级的YOLOv8&#xff0c;再到突破性能瓶颈的YOLOv10——每一次迭代都带来全新可能。作为开发者&#xff0c;究竟该选哪一代&#xff1f;本文用千字长文对比表格为你彻…

Claude Code是什么?国内如何使用到Claude Code?附国内最新使用教程

2025年已过大半&#xff0c;相信你也听说过 Claude——它是近年最受关注的 AI 模型之一&#xff0c;而 Claude Code 则是它面向编程场景的特别版本&#xff0c;专为代码理解、生成与重构而生&#xff0c;尤其擅长处理大项目、长上下文&#xff0c;和开发者对话更自然。 但对于一…

双轮驱动:政策激励与外部制约下的国产服务器市场演进

2025年6月&#xff0c;科智咨询正式发布《中国国产服务器市场研究报告&#xff08;2025&#xff09;》&#xff0c;报告从国产服务器产业概述、政策环境分析、市场现状与竞争格局、面临挑战与市场机遇等维度&#xff0c;深入剖析国产服务器市场现状及未来发展趋势。2022年10月&…