function ba_net()
disp('BA无标度网络模型');
m0=input('请输入网络初始节点数');
m=input('引入一个新节点后,连接到m个以存在节点(m<=m0),请输入m的值');%????
N=input('请输入网络最终节点数');
disp('请输入初始网络状况 1 孤立点 2 完全图 3 随机加边图');
pp=input('请输入 1,2或3');
randnumber=rand(2,N)*1000;
x=randnumber(1,:);
y=randnumber(2,:);
plot(x,y,'r.','Markersize',18);
hold on;
switch pp
case 1
A=zeros(N);
case 2
A=zeros(N);
for i=1:m0
for j=i+1:m0
A(i,j)=1;
A(j,i)=1;
end
end
case 3
A=zeros(N);
p0=0.5;
for i=1:m0
for j=i+1:m0
p1=unifrnd(0,1);
if p1<=p0
A(i,j)=1;
A(j,i)=1;
end
end
end
end
number=m0;
for i=m0+1:N
B=leiji_shuzu(A,number);
C=zeros(1,number);
for PP=2:number+1
C(1,PP-1)=B(1,PP)/B(1,number+1);
end
fprintf('累计概率%8.5f\n',C);
for j=1:m %利用赌轮法从已有的节点中随机选择m个节点与新加入的节点相连
random_data=rand(1,1);
aa=find(C>=random_data);jj=aa(1);
fprintf('aa%8.5f\n',jj) ; % 节点jj即为用赌轮法选择的节点
A(i,jj)=1;A(jj,i)=1;
end
number=number+1;
end
for i=1:N
for j=1:N
if A(i,j)==1
plot([x(i),x(j)],[y(i),y(j)],'linewidth',1);
hold on;
end
end
end
hold off
degree_distribution(A);
aver_path=aver_pathlength(A);
disp(aver_path);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 累计数组
function B=leiji_shuzu(A,N)
B=zeros(1,N+1);
k=0;
for i=1:N
for j=1:N
if A(i,j)==1;
k=k+1;
end
end
B(1,i+1)=k+B(1,i);
k=0;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
degree_distribution.zip_ba_复杂网络
版权申诉
28 浏览量
2022-07-15
17:24:46
上传
评论
收藏 1KB ZIP 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+