matlab仿真消息在网络平台的传播

step1代码为网上copy的代码,其余部分原创
step1:生成无标度网络

N = 1000; m0 = 3;m = 3; %初始结点3,度3 节点数N
adjacent_matrix = sparse(m0,m0);%初始化邻接矩阵
for i = 1:m0
    for j = 1:m0
        if j~=i%去掉自身形成的环
            adjacent_matrix(i,j) = 1;%建立初始临界矩阵
        end
    end
end
adjacent_matrix = sparse(adjacent_matrix);
node_degree = zeros(1,m0+1);
node_degree(2:m0+1) = sum(adjacent_matrix);
for iter = 4:N
    iter
    total_degree = 2*m*(iter - 4)+6;
    cum_degree = cumsum(node_degree);
    choose = zeros(1,m);
    %选出第一个和新点相连接的定点
    r1 = rand(1)*total_degree; %计算与已存在点相连的概率
    for i = 1:iter-1
        if(r1>=cum_degree(i))&(r1<cum_degree(i+1))%选取度大的点
            choose(1) = i;
            break
        end
    end
    %选出第二个和新点相连接的顶点
    r2 = rand(1)*total_degree;
    for i = 1:iter-1
        if(r2>=cum_degree(i))&(r2<cum_degree(i+1))
            choose(2) = i;
            break
        end
    end
    while choose(2) == choose(1)
        r2 = rand(1)*total_degree;
        for i = 1:iter-1
            if(r2>=cum_degree(i))&(r2<cum_degree(i+1))
                choose(2) = i;
                break
            end
        end
    end
    %选出第三个和新点相连接的顶点
    r3 = rand(1)*total_degree;
    for i = 1:iter-1
        if(r3>=cum_degree(i))&(r3<cum_degree(i+1))
            choose(3) = i;
            break
        end
    end
    while (choose(3) == choose(1)|choose(3) == choose(2))
        r3 = rand(1)*total_degree;
        for i = 1:iter-1
            if(r3>=cum_degree(i))&(r3<cum_degree(i+1))
                choose(3) = i;
                break
            end
        end
    end
    %把新点加入网络后,对邻接矩阵进行相应的改变!   
    for k = 1:m
        adjacent_matrix(iter,choose(k))=1;
        adjacent_matrix(choose(k),iter)=1;
    end
    node_degree = zeros(1,iter+1);
    node_degree(2:iter+1) = sum(adjacent_matrix);
end
save data adjacent_matrix

step2:理想模型

%所有人接受消息%最初的模型,概率不变,人群相同
adj =adjacent_matrix;%邻接矩阵
num = size(adj);num = num(1);
N = 17;%循环次数
beta = 0.2; %未知者变为传播者概率
alpha = 0.1;%传播者变为超级传播者
delta = 0.3;%超级传播者接受消息变为免疫者
gamma = 0.3;%传播者变为免疫者
I = zeros(num,1); %未知者 0   传播者 1   超级传播者 2     免疫者 -1
im = zeros(N,1); im(1) = num;
s = zeros(N,1);s(1) = 0;
jm = zeros(N,1);jm(1) = 0;
r = zeros(N,1);r(1) = 0;
%信息发布者为超级传播者

for i = 2:1:N
    for j = 1:num
        if (rand(1) < beta)&&(I(j) == 0)%未知者变为传播者
            I(j) = 1;
        end
    end
    for j =1:num
        if (rand(1) < alpha)&&(I
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值