傳染病傳播模型(SIS)Matlab代碼


function spreadingability=sir(A,beta,mu)
for i=1:length(A)
    for N=1:50%隨機次數
        InitialState=zeros(length(A),1);InitialState(i)=1;
        time=5;%傳播時間
        I(N,:)=sire(A,InitialState,beta,mu,time);
    end
    spreadingability(i,1)=mean(mean(I));%節點i的傳播能力
end
end
function I=sire(A,InitialState,beta,mu,time)
%******************************
% A鄰接矩陣
% InitialState初始感染狀態
% beta感染率
% mu恢復率
% time傳播時間
%*****************************

   Infected=InitialState;recover=[];
   Infected_temp=zeros(size(Infected));
for t=1:1:time %一共進行時長time的演化
%%
%若i是易感節點, 則對i以一定概率進行傳染
    x1=find(Infected==0); 
    a1=rand(size(x1));
    b1=beta*(A(x1,:)*Infected);%已經被感染的節點以一定概率去感染其他節點
    xx1=setdiff(find(a1<b1),recover);
    Infected_temp(x1(xx1))=1;%不是recover的節點以一定概率被感染
    xx2=setdiff(find(a1>=b1),recover);
    Infected_temp(x1(xx2))=0;%對不是recover且沒被感染的其他節點保留易感狀態
%%
%若i是染病節點, 則對i以一定概率進行移除(recover)
    x2=find(Infected==1); %如果是已經被感染的節點
    a2=rand(size(x2));
    xx3=find(a2<mu);%對染病節點以一定概率進行recover
    recover=[recover;xx3];%更新被recover節點;
    xx4=find(a2>=mu);
    Infected_temp(x2(xx4))=1;%余下未被recover的節點仍保留感染能力
    Infected=Infected_temp;
    I(t)=sum(Infected); %記錄每個時間步的染病節點數量

end


end

  susceptible-infected-recovered(SIR)傳染病模型常用來計算節點影響力標准測量。在SIR模型中,節點有三個狀態:易感者(susceptible),感染者(infected),恢復者(recovered)。易感者能夠被感染者染病,感染者染病且有感染易感者的能力,恢復者由感染者恢復而成,不再具備感染能力同時也不會再被感染。傳染病模型參數有恢復率μ,傳染概率β,重復仿真次數T,仿真時間timespace。仿真過程如下:選擇網絡中一個節點i作為感染者節點,以傳染概率βi連接的鄰居易感者節點傳染病毒,被染病的節點繼續以β的概率向他們的鄰居易感者節點傳染。同時每個染病節點在每階段以μ的概率轉變成恢復節點。當μ=0時,網絡中只存在感染者和易感者,此時模型被稱為Susceptible-infected(SI)模型。仿真結束后,可以得到每個節點i的傳染能力Si

 

其中ki(t)表示節點第t次仿真時傳染的節點個數,網絡中節點傳染能力S=[S1,S2,…,SN]

2018/11/20 更新:經過網友的指正,需要說明的是下面的代碼是SIS傳染病模型,recover節點仍具有再次被感染的能力。和SIR模型中recover節點不再被感染還是有區別的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM