• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab练习程序(传染病模型)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近新型冠状病毒疫情越来越严重了,待在家中没法出去,学习一下经典传染病模型。

这里总结了五个模型,分别是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,[0 120],0.01);    %0.01为初始感染人口占比
plot(t,h,\'r\');
hold on;
plot(t,1-h,\'g\');
legend(\'感染人口占比I\',\'健康人口占比S\');
title(\'SI模型\')

%%SIS模型
figure;
[t,h] = ode45(@SIS,[0 120],0.01);   %0.01为初始感染人口占比
plot(t,h,\'r\');
hold on;
plot(t,1-h,\'g\');
legend(\'感染人口占比I\',\'健康人口占比S\');
title(\'SIS模型\')

%%SIR模型
figure;
[t,h] = ode45(@SIR,[0 300],[0.01 0.99]);    %[初始感染人口占比 初始健康人口占比]
plot(t,h(:,1),\'r\',t,h(:,2),\'b\');
hold on;
plot(t,1-h(:,2),\'g\');
legend(\'感染人口占比I\',\'健康人口占比S\',\'治愈人口占比R\');
title(\'SIR模型\')

%%SIRS模型
figure;
[t,h] = ode45(@SIRS,[0 300],[0.01 0.99 0]); %[初始感染人口占比 初始健康人口占比 初始治愈人口占比]
plot(t,h(:,1),\'r\',t,h(:,2),\'b\');
hold on;
plot(t,h(:,3),\'g\');
legend(\'感染人口占比I\',\'健康人口占比S\',\'治愈人口占比R\');
title(\'SIRS模型\')

%%SEIR模型
figure;
[t,h] = ode45(@SEIR,[0 300],[0.01 0.98 0.01 0]);  %[初始感染人口占比 初始健康人口占比 初始潜伏人口占比 初始治愈人口占比]
plot(t,h(:,1),\'r\');
hold on;
plot(t,h(:,2),\'b\');
plot(t,h(:,3),\'m\');
plot(t,h(:,4),\'g\');
legend(\'感染人口占比I\',\'健康人口占比S\',\'潜伏人口占比E\',\'治愈人口占比R\');
title(\'SEIR模型\')

SI.m:

function dy=SI(t,x)
beta = 0.1;    %感染率
dy=beta*x*(1-x);

SIS.m:

function dy=SIS(t,x)
beta = 0.1;    %感染率
gamma= 0.02;    %治愈率
dy=beta*x*(1-x)-gamma*x;

SIR.m:

function dy=SIR(t,x)
beta = 0.1;    %感染率
gamma = 0.02;    %治愈率
dy=[beta*x(1)*x(2)-gamma*x(1);
    -beta*x(1)*x(2)];

SIRS.m:

function dy=SIRS(t,x)
beta = 0.1;      %感染率
gamma = 0.02;    %治愈率
alpha = 0.01;    %治愈复感率
dy=[beta*x(1)*x(2)-gamma*x(1);
    -beta*x(1)*x(2)+alpha*x(3)
    gamma*x(1) - alpha*x(3)];

SEIR.m:

function dy=SEIR(t,x)
beta = 0.1;         %感染率
gamma1 = 0.05;      %潜伏期治愈率
gamma2 = 0.02;      %患者治愈率
alpha = 0.5;        %潜伏期转阳率
dy=[alpha*x(3) - gamma2*x(1);
    -beta*x(1)*x(2);
    beta*x(1)*x(2) - (alpha+gamma1)*x(3);
    gamma1*x(3)+gamma2*x(1)];

模型结果如下:

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi与C#之父:技术理想架构开发**发布时间:2022-07-18
下一篇:
delphi2010播放GIF动画发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap