核心提示:基于Matlab的无标度网络仿真...
function matrix = FreeScale(X)
%By 201121250314
N= X; m0= 3; m= 3;%初始化
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
matrix = adjacent_matrix;
联系:highspeedlogic
QQ :1224848052
微信:HuangL1121
邮箱:1224848052@qq.com
微信扫一扫: