遊船傳染病matlab

題目:
一隻遊船上有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日星期三

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章