题目:
一只游船上有800人,一名游客患了某种传染病,12小时后有3人发病,由于这种传染病没有早期症状,故感染者不能被及时隔离,直升机将在60至72小时之间将疫苗送到,试估算疫苗运到时患此感染病的人人数。1)用logistic模型建立感染人数增长模型2)用Matlab软件求改模型的解析解3)分别计算50,60,70,80,90,100,110,120,130,140,150小时后被感染人数。4)思考一下,利用游船有限的资源(自己合理假设)在疫苗到达之前该采取什么措施减少被感染人数?
求解:
1、 题目分析
(I) 用Logistic模型建立感染人数增长模型
设fun(t)表示发现首例病人后t小时的感染人数,则800-fun(t)表示此时未受感染的人数,由题意知fun(0)=1,fun(12)=3.根据常理,当感染人数fun(t)很小时,传染病的传播速度较慢,因为只有很少的游客能接触感染者;当感染人数fun(t)很大时,未受感染的人数800-fun(t)很少,即只有很少的游客能被感染,所以此时传染病的传播速度也很慢,排除上述两种极端情况,当有很多感染者和很多未感染者时,传播速度很快,因此,传染病的发病率,一方面受感染人数的影响,另一方面也受未感染人数的制约。根据以上分析,得dy/dt = ky(800-y)。解得
(II) 利用Matlab软件求模型的解析解.
利用Matlab的fsolve函数求模型的解析解.
(III)分别计算50~150小时被感染人数
直升机将在60至72小时之间将疫苗运到,假设疫苗到到达后可阻止传染病传播。计算50~150小时被感染人数,只需计算50、60、70、72四个时刻的患者人数。
(IV)在疫苗到达之前采取什么措施减少被感染人数?
假设游船上有消毒药品,应定时勤时对游船进行消毒,把已患病的人与未感染者隔离,人人保持最大间隔距离,尽量佩戴口罩,等待疫苗到来。
2、 程序
(II)
Root2d.m
function F = root2d(x)
F(1)= 800 / (1 + (x(1) * exp(-x(2) * 0))) - 1;
F(2)= 800 / (1 + (x(1) * exp(-x(2) * 12)))- 3;
Main.m
clc,clear all,close all;
Fun = @root2d;
x0=[0,0];
x = fsolve(Fun,x0);
(III)
fun.m
function f = fun(t)
% t:时间(小时)
% f = fun(t):计算t小时后感染人数
f = 800 / (1 + (799 * exp(-0.0918 * t)));
main1.m
clc,clear all,close all;
for i = 1:160
a(i) = fun(i);
end
figure(1)
plot(a)
b(1) = fun(50)
b(2) = fun(60)
b(3) = fun(70)
b(4) = fun(72)
3、 上机运行结果
(II)
(III)
4、 结果分析及说明
(I)
fun(t) = 800 / 1+ce-800kt
(II)
求得x0为c,x1为800k。c=799 , 800k=0.0918
(III)
50 60 70 72 80 90 100 110 120 130 140 150
88 189 349 385 385 385 385 385 385 385 385 385
5、 实验总结与体会
假设没有疫苗,感染人数随时间变化图像如下,从图像中可知,在70时附近,传染病的传染速度是最快的,由上表可证明,在72小时被感染的人数将是60小时感染人数的近2倍,这时就必须要运来疫苗,以阻止传染病的快速蔓延。
说明:
一共四个.m文件。
root2d是根据f(0)=1,f(12)=3求解未知量的函数,
main.m调用root2d,运行可得c,800k两个未知量
fun.m是只关于t的逻辑斯蒂方程
main1.m调用fun函数,求得不同时刻的感染者人数。
完成于6月10日星期三