matlab练习程序(传染病模型)
最近新型冠状病毒疫情越来越严重了,待在家中没法出去,学习一下经典传染病模型。
这里总结了五个模型,分别是SI模型,SIS模型,SIR模型,SIRS模型,SEIR模型。
这几种模型的特点先介绍一下。
首先定义SEIR:
S为易感者 (Susceptible),指未得病者,但缺乏免疫能力,与感染者接触后容易受到感染;
E为暴露者 (Exposed),指接触过感染者,但暂无能力传染给其他人的人,对潜伏期长的传染病适用;
I为感病者 (Infective),指染上传染病的人,可以传播给 S 类成员,将其变为 E 类或 I 类成员;
R为康复者 (Recovered),指被隔离或因病愈而具有免疫力的人。如免疫期有限,R 类成员可以重新变为 S 类。
一、SI模型
该模型只考虑易感者和感病者,感病者不断去感染易感者。
随着时间推移,该模型感染者越来越多直到所有人都感染。
其微分方程为:
其中beta为感染率。
二、SIS模型
该模型依然只考虑易感者和感病者,感病者不断去感染易感者,这里感病者会得到治疗恢复成易感者,不过恢复后依然可能得病。
随着时间推移,该模型感染者和易感者会达到动态平衡。
其微分方程为:
其中beta为感染率,gamma为治愈率。
三、SIR模型
该模型考虑易感者、感病者与康复者,其中感病者不断感染易感者,而感病者又不断接受治疗成为康复者,康复者因为得到抗体不会再成为易感者。
随着时间推移,该模型康复者越来越多,最终所有人都成为康复者。
其微分方程为:
其中beta为感染率,gamma为治愈率。
四、SIRS模型
该模型考虑易感者、感病者与康复者,其中感病者不断感染易感者,而感病者不断接受治疗成为康复者,康复者获得抗体能够抵抗一段时间,不过最终还是会成为易感者。
该模型和SIS模型很像,区别就是康复者能够抵抗一段时间,也就是有一定的复感率,而SIS模型的复感率为1。
随着时间推移,该模型同样会达到一个动态平衡。
其微分方程为:
其中beta为感染率,gamma为治愈率,alpha为复感率。
五、SEIR模型
该模型四种参与者全部考虑,其中感病者不断感染易感者,易感者得到病毒会成为潜伏者,潜伏者依然能够使易感者感染,潜伏者有一定概率自己痊愈,感染者接受治疗也能够痊愈,痊愈后不再能够感染该病。
随着时间推移,该模型最终也是所有人都会成为康复者。
其微分方程为:
其中beta为感染率,gamma1为潜伏期康复率,gamma2为患者康复率,alpha为潜伏期转阳率。
各模型matlab代码如下,其中ode45为4阶龙格库塔法解微分方程,具体实现见上一篇文章:
main.m:
clear all; close all; clc; %%SI模型 [t,h] = ode45(@SI,[ ],.01为初始感染人口占比 plot(t,h,'r'); hold on; plot(t,-h,'g'); legend('感染人口占比I','健康人口占比S'); title('SI模型') %%SIS模型 figure; [t,h] = ode45(@SIS,[ ],.01为初始感染人口占比 plot(t,h,'r'); hold on; plot(t,-h,'g'); legend('感染人口占比I','健康人口占比S'); title('SIS模型') %%SIR模型 figure; [t,h] = ode45(@SIR,[ ],[0.01 0.99]); %[初始感染人口占比 初始健康人口占比] plot(t,h(:,),),'b'); hold on; plot(t,-h(:,),'g'); legend('感染人口占比I','健康人口占比S','治愈人口占比R'); title('SIR模型') %%SIRS模型 figure; [t,h] = ode45(@SIRS,[ ],[]); %[初始感染人口占比 初始健康人口占比 初始治愈人口占比] plot(t,h(:,),),'b'); hold on; plot(t,h(:,),'g'); legend('感染人口占比I','健康人口占比S','治愈人口占比R'); title('SIRS模型') %%SEIR模型 figure; [t,h] = ode45(@SEIR,[ ],[]); %[初始感染人口占比 初始健康人口占比 初始潜伏人口占比 初始治愈人口占比] plot(t,h(:,),'r'); hold on; plot(t,h(:,),'b'); plot(t,h(:,),'m'); plot(t,h(:,),'g'); legend('感染人口占比I','健康人口占比S','潜伏人口占比E','治愈人口占比R'); title('SEIR模型')
SI.m:
function dy=SI(t,x) beta = 0.1; %感染率 dy=beta*x*(-x);
SIS.m:
function dy=SIS(t,x) beta = 0.1; %感染率 gamma= 0.02; %治愈率 dy=beta*x*(-x)-gamma*x;
SIR.m:
function dy=SIR(t,x) beta = 0.1; %感染率 gamma = 0.02; %治愈率 dy=[beta*x()*x()-gamma*x(); -beta*x()*x()];
SIRS.m:
function dy=SIRS(t,x) beta = 0.1; %感染率 gamma = 0.02; %治愈率 alpha = 0.01; %治愈复感率 dy=[beta*x()*x()-gamma*x(); -beta*x()*x()+alpha*x() gamma*x() - alpha*x()];
SEIR.m:
function dy=SEIR(t,x) beta = 0.1; %感染率 gamma1 = 0.05; %潜伏期治愈率 gamma2 = 0.02; %患者治愈率 alpha = 0.5; %潜伏期转阳率 dy=[alpha*x() - gamma2*x(); -beta*x()*x(); beta*x()*x() - (alpha+gamma1)*x(); gamma1*x()+gamma2*x()];
模型结果如下:
SI模型:
SIS模型:
SIR模型:
SIRS模型:
SEIR模型:
参考:
https://baike.baidu.com/item/%E4%BC%A0%E6%9F%93%E7%97%85%E6%A8%A1%E5%9E%8B/5130035
matlab练习程序(传染病模型)的更多相关文章
- matlab练习程序(SUSAN检测)
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...
- MATLAB随机森林回归模型
MATLAB随机森林回归模型: 调用matlab自带的TreeBagger.m T=textread('E:\datasets-orreview\discretized-regression\10bi ...
- Backbone.js 为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构
Backbone.js 为复杂Javascript应用程序提供模型(models).集合(collections).视图(views)的结构.其中模型用于绑定键值数据和 自定义事件:集合附有可枚举函数 ...
- 基本的传染病模型:SI、SIS、SIR及其Python代码实现
本文主要参考博客:http://chengjunwang.com/en/2013/08/learn-basic-epidemic-models-with-python/.该博客有一些笔误,并且有些地方 ...
- 简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型
如何在ADO中使用接口的抽象数据提供程序 在cofig中 appSettings下,配置数据连接类型 <appSettings> <!--这个键值映射到枚举值中的某个值--> ...
- 基于MATLAB搭建的DDS模型
基于MATLAB搭建的DDS模型 说明: 累加器输出ufix_16_6数据,通过cast切除小数部分,在累加的过程中,带小数进行运算最后对结果进行处理,这样提高了计算精度. 关于ROM的使用: 直接设 ...
- (转)matlab练习程序(HOG方向梯度直方图)
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...
- 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul
本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
随机推荐
- jmeter的使用---用户变量
用户变量有以下方式: 一.外部引入:csv引入参数 二.sample传递参数:http请求的body参数 三.定义用户变量:全局变量 (1)用户定义的变量 name,和value 一对一 (2)用 ...
- 服务器安装mysql后配置远程访问权限
#登录mysql mysql -uroot -p: use mysql: #所有ip能访问 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED B ...
- 【visio】跨职能流程图
归属于 流程图类别 相比于普通流程图,突出了参与流程的组织.部门之间的联系,形式化地说,它突出的是参与流程的对象之间的联系. 它除了表达基本流程,同时也能展示每个每个流程的归属方,让每个对象明确知道自 ...
- Lining Up
AtCoder - 2271-Lining Up ...
- 506,display有哪些值?说明他们的作用
block:转换成块状元素 inline:装换成行内元素 none:设置元素不可见 inline-block:想行内元素那样显示,但是其内容像块类型元素一样显示 list-item:想块类型元素一样显 ...
- P&R 2
Floorplan: 要做好floorplan需要掌握哪些知识跟技能? 通常,遇到floorplan问题,大致的debug步骤跟方法有哪些? 如何衡量floorplan的QA? Floorplan是后 ...
- C/C++编程规范
1.文件结构 C/C++程序通常分为两个文件,一个文件用于保存程序的声明,一个文件用于保存程序的实现. 1.1 版权和版本的声明 版权和版本的声明位于头文件和定义文件的开头,主要内容有:(1)版权信息 ...
- 深度学习之反向传播算法(BP)代码实现
反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接 ...
- opencv:自定义滤波
卷积核的定义 均值卷积核 // 自定义滤波 - 均值卷积 int k = 15; Mat mkernel = Mat::ones(k, k, CV_32F) / (float)(k * k); Mat ...
- vue 实现简单的富文本编辑
安装:npm install vue-quill-editor --save 安装Vue-Quill-Editor需要依赖: npm install quill --save 在入口文件main.js ...