BA網路matlab代碼及度分布可視化1

BA網路matlab代碼及度分布可視化1

%%% 從已有的m0個節點的網路開始,採用增長機制與優先連接的機制生成BA無標度網路

%% A ——————返回生成網路的鄰接矩陣

m0=input(未增長前的網路節點個數m0: );

m=input( 每次引入的新節點時新生成的邊數m: );

N=input(增長後的網路規模N: );

disp(初始網路時m0個節點的連接情況:1表示都是孤立;2表示構成完全圖;3表示隨機連接一些邊);

pp=input(初始網路情況1,2或3: );

if m>m0

disp(輸入參數m不合法);

return;

end

switch pp

case 1

A=zeros(m0);

case 2

A=ones(m0);

for i=1:m0

A(i,i)=0;

end

case 3

for i=1:m0

for j=i+1:m0

p1=rand(1,1);

if p1>0.5

A(i,j)=1;

A(j,i)=1;

if i == j

A(i,j)=0;

end

end

end

end

otherwise

disp(輸入參數pp不合法);

return;

end

for k=m0+1:N %次數的k就是控制新添加的第k行和第k列

M=size(A,1);

p=zeros(1,M);

%find(A==1)返回A中等於1的元素所在的編號(不等於下標),即值1=1,1(下標); 2 = 2,1; 3 = 2,1; 4 =

%2,2之類的。返回的結果也是一個一維度的矩陣。1,2,3,4,5....n

%length()返回這個矩陣的大小

if length(find(A==1))==0

p(:)=1/M;%p中的每一個元素

else

for i=1:M

%不論是上三角形式還是對稱矩陣形式,都不用除以2

p(i)=length(find(A(i,:)==1))/length(find(A==1));

end

end

pp=cumsum(p); %求累計概率

%下面這部分在BA網路的構建模型中經常不講,導致無法理解怎麼選點連接。

%是選累積概率最大的幾個點連接?

%還是隨機選幾個概率大的點連接。

for i=1:m %利用賭輪法從已有的節點中隨機選擇m個節點與新加入的節點相連

random_data=rand(1,1);

%pp是從小到大排列,因此,aa(1)就是比隨機數大一個的數,即上界,或者所在區間的最大坐標值。

aa=find(pp>=random_data);jj=aa(1); % 節點jj即為用賭輪法選擇的節點

A(k,jj)=1;

A(jj,k)=1;

%設置對角線元素為0

if k == jj

A(k,jj)=0;

end

end

end

%

df=sum(A>0);

pp2=tabulate(df);

sw=find(pp2(:,3)>0);

loglog(pp2(sw,1),pp2(sw,3)/100,b*);

%lsline %最小二乘擬合直線,會導致報數據為負的警告

title(BA無標度網路度分布圖)

xlabel(k);

ylabel(P(k));

推薦閱讀:

如何為列表裡的字典(元組)進行排序
個人的努力在時代的進步面前不值一提
碼農面試知識收藏夾
Python黑科技:50行代碼運用Python+OpenCV實現人臉追蹤
BinaryTree_.h_.cpp

TAG:MATLAB | 編程 | 計算機網路 |