同城医药问答网

 找回密码
 立即注册
查看: 125|回复: 20

经典传染病的SIR模型(基于MATLAB)

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-31 18:01:54 | 显示全部楼层 |阅读模式
经典的SIR模型是一种发明于上个世纪早期的经典传染病模型,此模型能够较为粗略地展示出一种传染病的发病到结束的过程,其核心在于微分方程,本次我们利用matlab来对此方程进行
其中三个主要量
S是易感人群
I是感染人群
R是恢复人群
这三个量都是跟随时间变化的函数,即可以表示为,其中的t我们设定为一个单位时间,我们即有如下的公式:


然而要列出此种类似的方程我们需要一部分的理想化条件,这些理想化条件是比较重要的,
1.首先即城市的总人数不变,即:


K为一个常数值,一个恒定量。
2.假设 t 时刻单位时间内,一个病人能传染的易感者数目与此环境内易感者总数s(t)成正比,设定比例系数为β,从而在t时刻单位时间内被所有病人传染的人数为βs(t)i(t)
3. t 时刻,单位时间内从染病者中移出的人数与病人数量成正比,比例系数为γ,单位时间内移出者的数量为γi(t)

故我们可以得知其作用的机制为:易感人数和系数以及感染人数同时作用于总的易感人数,同时恢复人数和恢复系数又对感染人数起到影响。但是同时这又是一个单向性的机制。
基于以上三个条件的假设,我们可以获得其人数变化的机制,也即
1.易感个体的下降率为(注:此处为负数):


2.感染个体的增长率为:


3.恢复个体的增长率为:


我们利用微分方程可以表示如下:



SIR核心的微分方程

我们对此类方程利用matlab编写SIR函数
其代码为:



sir 函数的matlab code

其中a即为参数,b也为参数,这是可以调整设置的参数,故对于此微分方程的求解,我们利用matlab内建的函数ode45,来进行求解,我们可以参照ode45()函数的使用范例
进行调用
即[t,x]=ode45(@sir,[0:1:400],[1 116000 0]);
此处的[0:1:400]的为时间的取值范围,这里我们以天为单位,取了0到40等41个点,也即41天。
此处的[1 740000 0]分别为S(t),I(t),R(t)的初始值。
我们利用如下代码:
[t,x]=ode45(@sir,[0:1:180],[1 116000 0]);
>> hold on;
>> plot(t,x(:,1),'o-');
>> plot(t,x(:,2),'*-');
>> plot(t,x(:,3),'d-');
legend('感染人数','易感人数','恢复人数');
title('SIR模型图');
xlabel('天数(days)');
ylabel('总人数');
获得图像如下:



SIR模型图

模型总结:此模型能够较好地模拟一个从传染病的过程,但是前提在于人能够恢复,并且获得终生免疫能力:



SIR模型示意图

由图可知,此模型为单向模型,易感人数在不断地往感染人数输入,而同时最后感染人数也在单向往恢复人数输入,所以易感人数和感染人数最后均会下降到0,而与此同时,所有人均会成为恢复人数,此即为此模型的局限性。
                                                                                                  SANGHUSUN
                                                                                                      2020.01.27
回复

使用道具 举报

3

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-31 18:02:17 | 显示全部楼层
桑大佬tql
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-31 18:02:51 | 显示全部楼层
请问a,b值怎么取呢,谢谢
回复

使用道具 举报

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-12-31 18:03:34 | 显示全部楼层
function里面的t0表示什么?e是总人数还是易感总人数?
回复

使用道具 举报

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-12-31 18:04:27 | 显示全部楼层
能不能举个例子?就是把现在的数据放进去算一下?自己不会[流泪]
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-31 18:04:46 | 显示全部楼层
如何校准参数?
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-31 18:05:10 | 显示全部楼层
写的很赞,就是这句应该是此处的[1 740000 0]分别为I(t), S(t),R(t)的初始值。
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-31 18:05:22 | 显示全部楼层
易感个体的下降率为什么不除K,S除K才是接触人群中易感人群的比例啊
回复

使用道具 举报

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-12-31 18:05:49 | 显示全部楼层
人口基数是所有的人口吗?还是说所有人里面最易感染的一小部分人?
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-31 18:06:24 | 显示全部楼层
请问非单项模型怎么做呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|同城医药问答网

GMT+8, 2025-7-8 05:55 , Processed in 0.145373 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表