Processing math: 100%

SIS病毒模型解析及模拟

解析

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

即此时N42

为分析何时进入稳态,故解导函数等于零(实际上该数学模型永不为0,这里以103代替),得

平衡点

t=20log(2473)20log(6247350531223)255

图解

通解

解析解

I(t)=N(γβr)elog(Nγ+I0βrNβrI0)+γtβrtβrS(t)=N(γelog(NγS0βrNS0)+γtβrt)elog(NγS0βrNS0)+γtβrtβr

导数

ddtI=Nelog(Nγ+I0βrNβrI0)+γtβrt(γβr)2(elog(Nγ+I0βrNβrI0)+γtβrtβr)2ddtS=Nσ1(γβr)σ1βr+Nσ1(γσ1)(γβr)(σ1βr)2σ1=elog(NγS0βrNS0)+γtβrt

增长最快时间点

t=log(βr)log(Nγ+I0βrNβrI0)+2πkiγβr(N0elog(Nγ+I0βrNβrI0)+γσ1γβrβrσ1γβrβrkZγβrσ1=log(βr)log(Nγ+I0βrNβrI0)+2πki)

平衡点

0=103

t=log(βrσ3σ2500Nγσ6+σ5+σ4)σ1+2πkiγβrσ1=log(Nγ+I0βrNβrI0)σ2=500Nβ2r2σ3=500Nγ2σ4=1000Nβγrσ5=500Nβrσ6σ6=250Nβ2r2+500Nβγr+βr250Nγ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

留下评论

公式加载中