📄 powerlaw_with_expected_exponent.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 + -