?? smallworld.m
字號:
tic
clc;
N=20;K=2;p=1;
angle=0:2*pi/N:2*pi-2*pi/N; %%生成最近鄰耦合網(wǎng)絡的各節(jié)點坐標
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; %%生成最近鄰耦合網(wǎng)絡的鄰接矩陣
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 %% 生成的隨機數(shù)小于p,則邊進行隨機化重連,否則,邊不進行重連
A(i,jj)=0;A(jj,i)=0; %重連策略:先斷開原來的邊,再在未連的邊中隨機選擇另一個節(jié)點,與原節(jié)點連接。
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小世界網(wǎng)絡圖
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('該網(wǎng)絡圖不是連通圖');
end
text(0,-120,'aver_D');
toc
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -