smallworld.m
来自「复杂网络的基础」· M 代码 · 共 71 行
M
71 行
tic
clc;
N=20;K=2;p=1;
angle=0:2*pi/N:2*pi-2*pi/N; %%生成最近邻耦合网络的各节点坐标
x=100*sin(angle);
y=100*cos(angle);
plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','markersize',8);
hold on;
A=zeros(N);
for i=1:N
for j=i+1:i+K
jj=j;
if j>N
jj=mod(j,N);
end
A(i,jj)=1; A(jj,i)=1; %%生成最近邻耦合网络的邻接矩阵
end
end
for i=1:N
for j=i+1:i+K
jj=j;
if j>N
jj=mod(j,N);
end
p1=rand(1,1);
if p>p1 %% 生成的随机数小于p,则边进行随机化重连,否则,边不进行重连
A(i,jj)=0;A(jj,i)=0; %重连策略:先断开原来的边,再在未连的边中随机选择另一个节点,与原节点连接。
A(i,i)=1; a=find(A(i,:)==0);
rand_data=randint(1,1,[1,length(a)]);
jjj=a(rand_data);
A(i,jjj)=1;A(jjj,i)=1;
A(i,i)=0;
end
end
end
for i=1:N
for j=i+1:N
if A(i,j)~=0
plot([x(i),x(j)],[y(i),y(j)],'linewidth',1.2);
hold on; %% 画出WS小世界网络图
end
end
end
axis equal;
hold off
D=A;
D(find(D==0))=inf;
for i=1:N
D(i,i)=0;
end
for k=1:N %Floyd算法求解任意两点的最短距离
for i=1:N
for j=1:N
if D(i,j)>D(i,k)+D(k,j)
D(i,j)=D(i,k)+D(k,j);
end
end
end
end
aver_D=(sum(sum(D)))/(N*(N-1)) %平均路径;长度
if aver_D==inf
disp('该网络图不是连通图');
end
text(0,-120,'aver_D');
toc
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?