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 + -
显示快捷键?