各位高手多多帮忙,以下是我写的关于WS小世界网络模型的代码,图形老是显示不出来,好像还有几处错误,因为是菜鸟,希望各位帮我指点一下。
clear all;
clc;
format long;
k=6;N=200; %初始化,k为节点与相邻节点相连的个数,N为节点数
for i=1:14
p(15-i,1)=1/2^(i-1);
end
pp=length(p);
rap=5;
L=zeros(pp,rap);
C=zeros(pp,rap);
for ppp=1:pp
for rap1=1:rap
%p=0时的规则模型
for i=1:N %构建矩阵
for j=i+1:i+k/2
j1=j;
if j>N
j1=mod(j,N); %求余,使之成为一个环
end
A(i,j1)=1;A(j1,i)=1; %生成的矩阵是相互对称的
end
end
%以下是随机化重连
for i=1:N
for j=i+1:i+k/2
j1=j;
if j>N
j1=mod(j,N);
end
r=rand(1);
if ppp>r
A(i,j1)=0;A(j1,i)=0;
A(i,i)=1;
D=find(A(i,:)==0); %%%此处有错误。。。。
d=length(D);
d1=fix(rand()*d+1); %产生随机数
j2=D(d1); %得到列坐标的值
A(i,j2)=1;A(j2,i)=1;
A(i,i)=0;
end
end
end
%求平均路径
for i=1:N
A(i,i)=0;
end
find(A(i,i)==1)=inf;
for k=1:N
for i=1:N
for j=1:N
if A(i,j)>A(i,k)+A(k,j) %Floyd算法求最短路径
A(i,j)=A(i,k)+A(k,j);
end
end
end
end
L(pp,rap1)=sum(sum(A))/(N*(N-1)); %求出平均路径
%求聚类系数
for i=1:N
E=find(A(i,:)==1); %找出节点i的邻边
if isempty(E)
Ci(i)=0; %表示i节点的邻边没有相连的
else
m=length(E); %表示邻边的个数
if m==1
Ci(i)=0; %只剩一个节点
else
AA=A(E,E); %邻边组成的子图
Ci(i)=sum(sum(AA))/(m*(m-1));%每个节点的聚类系数
end
end
end
C(pp,rap1)=mean(Ci); %聚类系数
end
end
figure
average_L=mean(L,2);
semilogx(p,average_L/average_L(0,0),'--p');
hold on;
average_C=mean(C,2);
semilogx(p,average_C/average_C(0,0),'-rs');
hold on;
legend('L(p)/L(0)','C(p)/C(0)');
title('WS模型');