传染病模型及实现(附MATLAB代码)
问题
一只游船上有800人,一名游客不慎患传染病,12小时后有3人发病,由于船上不能及时隔离,问经过72小时,患此病的人数。
思路
假设游客在船上均匀分布,与患者接触的人都有一定几率患病,此模型中认为患者上、下、左、右四个单位为与患者接触的人,而患者分布在每一个单位时间都会变化,由此可得以下代码:
n=800;%总人数
ts=12;
fs=3;
t=0;
f=1;
j=1;
jishu1=1:72;
jishu2=zeros(1,72);
%接触患病模型
cells=zeros(25,32);
id=randperm(800,1);%初始病人位置
cells(id)=1;
heng=ones(1,32).*0.5;
cells=[heng;cells;heng];
zong=0.5.*ones(27,1);
cells=[zong,cells,zong];while j<72i=1;while i<918 %接触患病if(cells(i)==0)if(cells(i-1)==1||cells(i+1)==1||cells(i-27)==1||cells(i+27)==1)if(rand<(3/48))cells(i)=1;endendendi=i+1;endj=j+1;%患者运动fn=length(find(cells==1));ids=randperm(800,fn);ce=zeros(25,32);ce(ids)=1;cells=ce;heng=ones(1,32).*0.5;cells=[heng;cells;heng];zong=0.5.*ones(27,1);cells=[zong,cells,zong];jishu2(j)=fn;imshow(cells);hold onpause(0.1);
end
hold off
plot(jishu1,jishu2)
结果如下: