文章索引
显示
解析
在SI模型基础上增加感染者 I 恢复健康的概率γ。
恢复后仍有可能被再次感染。得到
常微分方程
ddtI=rβISN−γIddtS=−rβISN+γI
现假设总人数N=100,感染者接触易感者的人数r=2,传染概率β=0.03,恢复概率γ=0.01,初始感染者为1即I(0)=1。得到
解
I(t)=2503(elog(2473)−t20+1)S(t)=50(et20+log(3247)+6)3(et20+log(3247)+1)
为观察其变化率对其求导,得
导数
ddtI=25elog(2473)−t206(elog(2473)−t20+1)2ddtS=5et20+log(3247)6(et20+log(3247)+1)−5et20+log(3247)(et20+log(3247)+6)6(et20+log(3247)+1)2
为找出增长速度最快的时间,求其导数最大值,即
最快增长时间点
t=I′(t)max=20log(247)−20log(3)≈88
即此时N≈42
为分析何时进入稳态,故解导函数等于零(实际上该数学模型永不为0,这里以10−3代替),得
平衡点
t=20log(2473)−20log(62473−50√5√31223)≈255
图解

通解
解析解
I(t)=N(γ−βr)elog(Nγ+I0βr−NβrI0)+γt−βrt−βrS(t)=−N(γ−elog(Nγ−S0βrN−S0)+γt−βrt)elog(Nγ−S0βrN−S0)+γt−βrt−βr
导数
ddtI=−Nelog(Nγ+I0βr−NβrI0)+γt−βrt(γ−βr)2(elog(Nγ+I0βr−NβrI0)+γt−βrt−βr)2ddtS=Nσ1(γ−βr)σ1−βr+Nσ1(γ−σ1)(γ−βr)(σ1−βr)2其中σ1=elog(Nγ−S0βrN−S0)+γt−βrt增长最快时间点
t=log(−βr)−log(Nγ+I0βr−NβrI0)+2πkiγ−βr(N≠0∧elog(Nγ+I0βr−NβrI0)+γσ1γ−βr−βrσ1γ−βr≠βr∧k∈Z∧γ≠βrσ1=log(−βr)−log(Nγ+I0βr−NβrI0)+2πki)平衡点
取0=10−3
t=log(βr−σ3−σ2−500Nγσ6+σ5+σ4)−σ1+2πkiγ−βr其中σ1=log(Nγ+I0βr−NβrI0)σ2=500Nβ2r2σ3=500Nγ2σ4=1000Nβγrσ5=500Nβrσ6σ6=√−−250Nβ2r2+500Nβγr+βr−250Nγ2250N查看所有模型及说明:点击病毒传染的动态扩散模拟及数学模型
网络模拟
更新中.....
图示
Matlab代码
笛卡尔坐标系模拟
图示(动态过程未给出)

Matlab代码
clear
figure
N = 100; %人口总数
I = 1; %传染者
S = N - I; %易感者
R = 2; %感染者接触易感者的人数
B = 0.03; %传染概率
Y = 0.01; %康复概率
days = 300;
Dynamic = false;%设置为true显示动态模拟过程
Sdata=[];
state=zeros(1,N);
index=randperm(N,I);
state(index)=1;
if Dynamic
axis([0 N 0 N]);
hold on
end
for i=1:days
xpos=randperm(N);
ypos=randperm(N);
if sum(state)==100
break
end
for j=1:N
if state(j)~=1
continue
end
if rand()<=Y
state(j)=0;
continue
end
dis=sqrt((xpos-xpos(j)).^2+(ypos-ypos(j)).^2);
l=0;
for k=1:N
if state(k)==1
continue
end
l=l+1;
peo(l).dis=dis(k);
peo(l).num=k;
end
T = struct2table(peo);
sortedT = sortrows(T,'dis');
sortedS = table2struct(sortedT);
tp=sortedT{1:R,2};
for k=1:length(tp)
if rand()<=B
state(tp(k))=1;
end
end
end
Sdata(i)=sum(state);
%a=-8;
%b=8;
%xpos=xpos+ a + (b-a).*rand(1,N);
%ypos=ypos+ a + (b-a).*rand(1,N);
if Dynamic && rem(i,10)==0
phd=scatter(xpos,ypos,[],state,"filled");
title(['第' num2str(i) '天'])
drawnow
delete(phd)
end
end
figure
set(gcf,'visible',true)
MaxFigure
days=length(Sdata);
plot(1:days,Sdata,1:days,N-Sdata)
hold on
T = 1:days+100;
for idx = 1:length(T)-1
if S(idx)<0
S(idx)=0;
elseif S(idx)>N
S(idx)=N;
end
if I(idx)<0
I(idx)=0;
elseif I(idx)>N
I(idx)=N;
end
S(idx+1) = S(idx) - R*B*I(idx)*S(idx)/N + Y*I(idx);
I(idx+1) = I(idx) + R*B*I(idx)*S(idx)/N - Y*I(idx);
end
plot(T,S,T,I);
legend('模拟传染者','模拟易感者','易感者','传染者');
xlabel('天');ylabel('人数')
title('SIS模型')
Code language: Matlab (matlab)
如未特殊声明,文章均为原创。
本文标题:SIS病毒模型解析及模拟
本文链接:https://manwish.cn/article/analysis-and-simulation-of-sis-virus-model.html
本文标题:SIS病毒模型解析及模拟
本文链接:https://manwish.cn/article/analysis-and-simulation-of-sis-virus-model.html