資源簡(jiǎn)介
SIR病毒傳播模型的matlab程序;m文件,在matlab中可以直接使用。
代碼片段和文件信息
function?spreadingBySir()
????A=load(‘matlab.mat‘);
????%?node?number
????N=size(A1);???
????%感染概率
????irate=0.3;
????%恢復(fù)概率
????rrate=1;
????%初始時(shí)節(jié)點(diǎn)的狀態(tài)表初始時(shí)只有節(jié)點(diǎn)1為感染狀態(tài),其他的都為易感染狀態(tài)??
????start_node=1;
????%按照?qǐng)D的廣度優(yōu)先的原則來(lái)進(jìn)行病毒傳播
????BFSspreading(ANstart_nodeiraterrate);
end
%?
function?BFSspreading(ANstart_nodeiraterrate)
%隊(duì)列頭
head=1;????????????
%隊(duì)列尾,開始隊(duì)列為空,tail==head
tail=1;????????????
%向頭中加入感染源節(jié)點(diǎn)
queue(head)=start_node;??????
%隊(duì)列擴(kuò)展
head=head+1;??
%感染節(jié)點(diǎn)列表?
infection=start_node;??
%恢復(fù)節(jié)點(diǎn)列表??
recover=[];
%易感染節(jié)點(diǎn)列表
for?i=1:N
????%初始時(shí),start_node為感染狀態(tài)
????if?i==start_node
????????%-1表示該節(jié)點(diǎn)已經(jīng)從列表中刪除
????????susceptible(i)=-1;
????end
????%初始時(shí),除了start_node為感染狀態(tài)外,其他節(jié)點(diǎn)都處于易感染狀態(tài)
?????susceptible(i)=i;
end
%開始按照廣度優(yōu)先搜索順序向鄰居節(jié)點(diǎn)傳播
%判斷隊(duì)列是否為空
while?tail~=head???
????%取隊(duì)尾節(jié)點(diǎn)?
????i=queue(tail);??
????%如果該節(jié)點(diǎn)不在移除列表之中
????if?isempty(find(recover==i1))
????????????for?j=1:N
?????????????%如果節(jié)點(diǎn)j與當(dāng)前節(jié)點(diǎn)i相連并且節(jié)點(diǎn)j不在感染列表中
????????????if?A(ij)==1?&&?isempty(find(infection==j1))???
?????????????????infection_random=rand(1);
?????????????????if?infection_random?????????????????????%新節(jié)點(diǎn)入列
????????????????????queue(head)=j;??
????????????????????%擴(kuò)展隊(duì)列
????????????????????head=head+1;???
????????????????????%將新節(jié)點(diǎn)j加入感染列表
????????????????????infection=[infection?j];?
????????????????????
????????????????????%從易感染節(jié)點(diǎn)列表中刪除該節(jié)點(diǎn)設(shè)置為-1
????????????????????[~colv]?=?find(susceptible==j)?;
????????????????????susceptible(col)=-1;
????????????????????susceptible(susceptible==-1)=[];????????????????????
?????????????????end
????????????end
????????end
????????%將感染的節(jié)點(diǎn)按概率加入恢復(fù)節(jié)點(diǎn)列表??
????????recover_random=rand(1);
????????if?recover_random?????????????%恢復(fù)
????????????recover=[recover?i];??
????????????%從感染列表中刪除
????????????[~colv]?=?find(infection==i)?;
????????????infection(col)=-1;
????????????infection(infection==-1)=[];
????????end
????????tail=tail+1;?
????????
????end?%end?if??isempty(find(recover==i1)
end?%end?while
%分別現(xiàn)實(shí)最后節(jié)點(diǎn)的狀態(tài)
infection;
susceptible;
recover;
plot(infection)
plot(susceptible)
plot(recover)
end
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????2410??2020-11-27?06:01??spreadingBySir.m
- 上一篇:SIFT算法的圖像拼接
- 下一篇:基于boost電路的光伏MPPT控制
評(píng)論
共有 條評(píng)論