资源简介

模拟SIR信息传播模型的CP过程的仿真程序。SIR模型是基于传染病动力学的信息传播模型。

资源截图

代码片段和文件信息

function [ ss ii rr ] = CPSIR( DegreeBetaSourse_IDTppvv  )
%  刻画SIR模型
%   返回[ssiirr]
%   ss表示每一时刻传播节点的密度
%   ii表示每一时刻未感染节点的密度
%   rr表示每一时刻免疫节点的密度
%   输入变量的含义:
%      Degree---------度分布矩阵
%      Beta------------传播概率矩阵
%      links------------全边矩阵
%      Sourse_ID---------源传播节点

N = length(Degree);
A = zeros(N3);%产生一个N行3列的零矩阵存储节点状态第一列为传播状态,第二列为未感染状态,第三列为免疫状态
A(Sourse_ID1) = 1;%假设第一个节点为传播节点
for e = 1:N
    if e ~=Sourse_ID
        A(e2)=1;
    end
end
% p1 = 0.09;
p2=pp;%免疫概率
v=vv;%传播自然转移为免疫的速度
ss = zeros(1T);%产生一个1行T列的零矩阵,存储传播节点密度
ii = zeros(1T);
rr = zeros(1T);

for t = 1:T
    disp(num2str(t));
    S = 0;%传播节点数量
    I = 0;
    R = 0;
    for i = 1:N
        S = S + A(i1);
        I = I + A(i2);
        R = R + A(i3);
    end
    ss(1t) = S/N;
    ii(1t) = I/N;
    rr(1t) = R/N;
    
    %%
    %对节点遍历,根据传播规则进行交互
    for i = 1:N
        %如果节点i为传播节点,且它的度大于0
        if Degree(i)>0 && A(i1) == 1
            %确定节点i在Beta矩阵中的最开始那行的id(i_uplimit)
            i_uplimit = 1;
            if i == 1               %将序号为1的特殊处理
                i_uplimit = 1;
            else
                for j = 2:i
                    i_uplimit = i_uplimit + Degree(j-1);
                end
            end
            
            %contact process CP接触过程,每一时刻只与一个邻居交互
            rand_nei = randi(Degree(i) 1) + i_uplimit -1;%找出该邻居的编号
            %判断该邻居是未感染节点,则进行传播
            if A(Beta(rand_nei2)2)==1
                a = rand();
                
                if a                    A(Beta(rand_nei2)1) = 1;
                    A(Beta(rand_nei2)2) = 0;
                end
            end
            
            if A(Beta(rand_nei2)3)==1 || A(Beta(rand_nei2)1)==1%Beta(k1)表示的是Beta矩阵中第k行第一列的节点id
                b = rand();
                if b                    A(i3) = 1;
                    A(i1) = 0;
                end
            end            
        end
    end
    %%
    %传播节点可有较小概率自然衰减成免疫节点
    for i = 1:N
        if A(i1) ==1
            c =rand();
            if c                A(i3) = 1;
                A(i1) = 0;
            end
        end
    end
    
end
% plot(ss‘+-‘);
% hold on;
% plot(ii‘*‘);
% plot(rr‘.‘);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2603  2012-09-29 08:55  CPSIR.m

评论

共有 条评论