⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smallworld.m

📁 复杂网络中的小世界模型
💻 M
字号:
clear
clc
N=20; %vertex of the network
p=0.3; %the probability of link
k=2; %%%%  k<<N 
%%%%%%%%%%%%%%%%生成一个NW小世界网络%%%%%%%%%%%%%%%%%%%%
a=rand(N);
for i=1:N    
     for j=i-k:i+k
         if j<=0
            a(i,j+N)=1;
         elseif j>N
             a(i,j-N)=1;
         else
             a(i,j)=1;
         end
     end
     a(i,i)=0;
end
%%%%%%%%%%%%%%
for i=1:N
    for j=1:N
      if a(i,j)<p
          a(i,j)=1;
      else
          a(i,j)=0;
      end      
    end     
end

 for i=1:N     
     for j=i:N
          if a(i,j)~=a(j,i)
              a(j,i)=a(i,j);
          end
     end
 end
for i=1:N
  a(i,i)=0;  
end
 s=sum(a);
 for i=1:N
     a(i,i)=-s(i);
 end
%%%%%%%%%%%%%%%%结束生成一个NW小世界网络%%%%%%%%%%%%%%%%
clc
%%%%%%%%%%%%%%%%生成一个SW小世界网络%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%  A  代表连接矩阵 %%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%  S  代表稀疏化表的矩阵A 可节省内存   %%%%%%%%%%%%%%%%%%%
N=100; %vertex of the network
p=0.2; %the probability of link
k=10; %%%%  k<<N 最近邻 一维网络每个节点分别与两侧的k个节点相接。
q=1/(N-1-2*k); % 需要进行重新连接时的选取概率

A=zeros(N);%%% 生一N×N的0矩阵。
for i=1:N    
     for j=i-k:i+k
         if j<=0
            A(i,j+N)=1;
         elseif j>N
             A(i,j-N)=1;
         else
             A(i,j)=1;
         end
     end
     A(i,i)=0;
end
%%%%%%%%%%%%%%生成一个最近邻的一维耦合网络矩阵,对角线元素为0,存在连接则为1,其余0。

%%%%%%%%%%%%%%%%%%     开始以概p随机改写下三角阵的边
t1=0;t2=0;t3=0;%% t1统计随机选取边重连成功次数 t2随机重连不成功时强制选取的次数 t3 需要进行重新连接的次数
for i=2:N
    r=1;
       for j=1:i-1
       if A(i,j)==1            %% 找到一个元素"1"
         m=rand(1);             
         if m>1-p
         r=0;        %% 以一定的概率 p 重新连接
         t3=t3+1;
          %%%%%
         for w=1:5
           for l=1:N
              if A(i,l)==0 & r==0 & l~=i
                  n=rand(1);
                  if n>1-q
                      A(i,l)=1;
                       A(l,i)=1;
                      r=2;                     
                      t1=t1+1;%%  保证每重新连接只有一个0被置为1
                      A(i,j)=0;
                      A(j,i)=0; break
                  end
              end
          end    
      end
          %%%% 在对角线元素外的其余0 元素中随机选取一个 置为1 。
     
          %%%%
          if r==0
              for l=N:-1:1
                  if A(i,l)==0 & r==0 & l~=i
                     A(i,l)=1;
                     r=3;
                     t2=t2+1;
                      A(l,i)=1;
                      A(i,j)=0;
                      A(j,i)=0;
                 end 
             end 
         end
         %%%%%   当上述随机选取方法失败,不能找一个0 元素时,用该行最后一元素设为0 。保重连成功
                      
     end
 end 
end   
end 
%%%%%%%%%%%%%%%%%%      结束以概p随机改写下三角阵的边

%%%%%%%%%%%% 保证A为对称矩阵
for i=1:N     
     for j=i:N
          A(i,j)=A(j,i);
     end
 end
%%%%%%%%%%%%%  上三角与下三角元素对称化。


s=sum(A);
for i=1:N
    A(i,i)=-s(i);
end
%%%%% 重置对角线元素,为度的相反数。
t1;
t2;
t3;  %%% t3=t1+t2 且 t2越小越好
%%%%%%%%%%%%%%%%结束生成一个SW小世界网络%%%%%%%%%%%%%%%%
S=sparse(A);
%%%%%%%%%%%% 用稀疏矩阵表A,减少内存使用。
%%%%%%%%%%%%%%%%% 生成一个N个节点连接概率p的随机图网络.
A=rand(N);
for i=1:N
    for j=i:N
        if A(i,j)<p
           A(i,j)=1;
        else
            A(i,j)=0;
        end
    end
end
for i=1:N     
     for j=i:N
          A(j,i)=A(i,j);
     end
     A(i,i)=0;
end
 d=sum(A); %%%% d 为节点的度, d(i)为节点i的度 %%
 for i=1:N
     A(i,i)=-d(i);
 end
%%%%%%%%%%%%%%%%%结束 生成一个N个节点连接概率p的随机图网络.

% %%%%%%%%%%%%%%%%% 计算节点的度分布 %%%%%%%%%%%%
for j=1:N
    k(j)=0;
    for i=1:N
        if j==d(i)
            k(j)=k(j)+1;
        end
    end
    P(j)=k(j)/N;
end
for i=1:N
    k(i)=i;
end
plot(k,P,'-*'); %%%%用对数坐标画出度分布图%%%%%%%%%%
% %%%%%%%%%%%%%%%%% 结束计算节点的度分布 %%%%%%%%%%%%%%%%%
% 
% 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -