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

📄 powerlaw_with_expected_exponent.m

📁 复杂网络complex network 生成幂律分布的网络矩阵或者邻接矩阵
💻 M
字号:
function Nodes=Powerlaw_with_Expected_Exponent(N,m,gama,node_attribution)
%This program generates a power law degree distribution graph with expected gama
%Ref[Universal behavior of load distribution in Scale free networks,PRL V87,2001,12]
%Input:
%N--the number of nodes
%m--the mean degree <k>=2m
%gama--the expected exponent,blong to (2,infinit),whose corelation with the control
%      parameter alfa is: gama=1+1/alfa,where alfa is [0,1)
%node_attribution--if node_attribution==1,Nodes is adjacent matrix; if
%                   node_attribution=2,Nodes is adjacent list.
%Output
%Nodes--return the adjacent matrix if node_attribution=1.the adjacent list
%       if node_attribution=2
%



if node_attribution==1
    Nodes=zeros(N,N);
    p=zeros(N,1);
    pp=zeros(N,1);
    node_1_Len=zeros(N,1);
    node_2_Len=zeros(N,1);
    alfa=1/(gama-1);
    edge_num=N*m;
    
    %1.get nodes' weight
    for i=1:N
        p(i)=1/(i^alfa);        
    end
    %2.normalized node weights
    sum_p=sum(p);
    pp(1)=p(1)/sum_p;
    for i=2:N
        pp(i)=pp(i-1)+p(i)/sum_p;        
    end
    
    %3.add edge
    for i=1:edge_num
       %i
       ADD_ONE_EDGE=0;
       while ADD_ONE_EDGE==0
            node_1_Len=find(pp>rand(1)); 
            node_1=node_1_Len(1);
            node_2_Len=find(pp>rand(1));
            node_2=node_2_Len(1);
            while node_2==node_1%avoid self-loop
                node_2_Len=find(pp>rand(1));
                node_2=node_2_Len(1);
            end
            if Nodes(node_1,node_2)==0
                Nodes(node_1,node_2)=1;
                Nodes(node_2,node_1)=1;
                ADD_ONE_EDGE=1;
            else
                ADD_ONE_EDGE=0;
            end%Nodes(node_1,node_2)
       end%while ADD_ONE_EDGE==0
    end% for i=1:edge_num    
end%node_attribution


if TEST==1
    t=toc
    for i=1:N
        Degree(i)=nnz(Nodes(i,:));
    end
    plot_distribution(Degree,Line_color,1);
    fname=['PLRG',num2str(N),'k',num2str(m),'gama',num2str(gama)];
    Write_Sparse_Matrix(Nodes,[fname,'.adj']);
    Write_into_Pajek(Nodes,[fname,'.net']);
end

return

⌨️ 快捷键说明

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