2020/2/19

function H1N1(N,M,T,p1,p2,Ta,Tb,NN,MM,n)

TaS=zeros(N,M,T);TbS=zeros(N,M,T);%TaS,TbS分别为患病者,治愈者%的患病期,免疫期

i=1:1:100;j=1:1:100;t=0:1:100;i=0;j=0;

QQ1=round(1000*rand(1,pl*1000));

QQ2=round(1000*rand(1,p2*1000));%用于求节点是否选上的随机数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9%9%%

S=ones(N,M,T);S(NN,MM,1)=SS(2);S(15,5,1)=SS(2);

S(10,30,1)=SS(2);S(40,40,1)=SS(2);%S为状态矩阵

for t=2:1:T

    for i=2:N-1

        for j=2:M-1

            if S(i.j,t-1)==SS(1)

                S(i.j,t)=SS(1);TaS(i.j,t)=0;

            elseif S(i,j,t-1)==SS(2)

                if TaS(i.jt-1)>=Ta

                    TaS(i.j,t)=0;

                    S(i.j,t)=SS(3);

                else

                    TaS(i.j,t)=TaS(i.j,t-1)+1;S(i.j,t)=SS(2);

                end

            else

                if TbS(i.j,t-1)>=Tb

                    TbS(ij,t)=0;S(i.j,t)=SS(1);

                else

                    TbS(i.j,t)=TbS(i.j,t-1)+1;S(ij,t)=SS(3);

                end

            end

        end

    end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%得到t时刻的S分布状态

%%%%%%%%%%%%%%%%%%%%%%9%%%%%%%的%%%%%%%%%%%对所有节点进行扫描

for i=2:N-1

    for j=2:M-1

        if S(i.j,t)==SS(1)%%%%%%%%%%%判断是否为SS(1)分布状态

            S(i.j,t)=SS(1);

        elseif S(ij,t)==0%判断是否为新患病者,但不再参与传染

            S(i.j,t)=0;

        elseif S(i.j,t)==SS(2)%%%%判断是否为SS(2)分布状态%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%判断患病者周围八个位置的情况

            if S(i-1,j,t)~=SS(1)

                S(i-1,j,t)=S(i-1,j,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;

                QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(i-1,j,t)=SS(2);

                    end

                end

            end

            if S(i,j-1,t)~=SS(1)

                S(i,j-1,t)=S(i,j-1,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(ij-1,t)=SS(2);

                    end

                end

            end

            if S(i+1.j,t)~=SS(1)

                S(i+1,j,t)=S(i+1,j,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;

                QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(i+1,j,t)=0;

                    end

                end

            end

            if S(ij+1,t)~=SS(1)

                S(i.j+1,t)=S(i,j+1,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(ij+1,t)=0;

                    end

                end

            end

            if S(i-1,j-1,t)~=SS(1)

                S(i-1,j-1,t)=S(i-1.j-1,t);

            else iil=round(1000*rand(1));

                one=ones(1,pl*1000);

                ii2=iil*one;

                QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(i-1j-1,t)=SS(2);

                    end

                end

            end

            if S(i+1,j-1,t)~=SS(1)

                S(i+1,j-1,t)=S(i+1j-1,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;

                QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(i+1,j-1,t)=0;

                    end

                end

            end

            if S(i+1,j+1,t)~=SS(1)

                S(i+1,j+1,t)=S(i+1,j+1,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;

                QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(i+1,j+1,t)=0;

                    end

                end

            end

            if S(i-1,j+1,t)~=SS(1)

                S(i-1,j+1,t)=S(i-1.j+1,t);

            else iil=round(1000*rand(1));

                one=ones(1,p1*1000);

                ii2=iil*one;

                QQ=QQ1-ii2;

                for kk=1:p1*1000

                    if abs(QQ(1,kk))<=0.05

                        S(i-1,j+1,t)=SS(2);

                    end

                end

            end  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%周围八个位置判断结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%判断患病者与其它节点的传染关系

            yy=random('Poisson',n,[N,M]);

            for ii=2:N-1

                for jj=2:M-1

                    if yy(ii,jj)==n

                        if

(ii==i-1&jj==j-1)|(ii==i-1&jj==j)|(i==i-1&j==j+1)|(ii==i&j==j-1)|(ii==i&jj==j)|(ii==i&jj==j+1)|(ii==i+1&jj==j-1)|(ii==i+1&jj==j)|(ii==i+1&jj==j+1)|S(ii,jj,t)~=SS(1);

S(ii,jj,t)=S(ii.jj,t);

                        else iil=round(1000*rand(1));

                            one=ones(1,p2*1000);

                            ii2=iil*one;

                            QQ=QQ2-ii2;

                            for kk=1:p2*1000

                                if abs(QQ(1,kk))<=0.05

                                    S(ii,j+1,t)=0;

                                end

                            end

                  end

                end

            end

        end %%%%%%%给%%始%%%%光%%的%%%%%%%%%%%%%%%判断患病者与其它节点的传染关系结束

        else S(i,j,t)=SS(3);%9%%%%%%9%%判断是否为SS(4)状态

  end%%5%%%%96%%结束SS状态判断end

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%:%%%%%%%%%%结束所有节点扫描

%%%%%%%将患病的节点赋值为SS(2)状态

for i=2:N-1

    for j=2:M-1

        if S(i.j,t)==0

            S(i.j,t)=SS(2);

        end

    end

end

%结束赋值

if t==32

    for i=2:N-5

        for j=8:M-1

            if S(i.j,t)==SS(3)

                S(ij,t)=SS(1);

            end

        end

    end

    p2=0.000

end%%9869%0%9%5%9%59%9%59%9%%96%9%%9%%95%58%9%%9%9%9%9%9%9%59%9%59%9%5%96%96%95%根据实际因素做扰动

end%%9%9%%5%9%9%9%9%9%9%9%9%9%:9%59%9%9%3%%9%9%9%9%9%9%9%9%%9%%5%9%%%9%%%%%结束时间层的循环

S;%9%9%9%%9%98%9%9%5%9%9%5%9%%9%%59%9%9%%9%98%9%95%9%9%3%9%%9%9%%9%9%%9%%%%所有时间层的所有状态

%%%9%%%%%%%%%%%%5%%9%90%%%%5%%%%%%%0%%%以下为所有时刻对应的患病者人数

ii=zeros(1,T);aa=0;

for t=2:T

    for i=2:N-1

        for j=2:M-1

            if S(i,j,t)==SS(2)

                aa=aa+1;

            end

        end

    end

    ii(l,t)=aa;aa=0;

end

ii

plot(ii)

ij=(1:T);

yyy=[0,0,0,0,0,0,0,0,140,151,162,169,171,215,214,239,253,249,280,305,328,331,314

    ,344,302,299,281,283,303,280,238,228,217,218,220,233,247,260,274,287,300,313

    ,315,318,333,248,215,182,149]

plot(ij,ii,'+'),xlabel('t/day'),ylabel('The number of infected people')

hold on;

plot(ij,yyy)

text(2.5,330,'\fontsize{10}\it+simulation datal')

text(2.5,300,'\fontsize{10]\it-true data')

hold off

你可能感兴趣的:(2020/2/19)