无标度网络
m0=2
m=2
N=12
p8=0.1
x1=100*rand(1,m0);
y1=100*rand(1,m0);
x2=100*rand(1,m0);
y2=100*rand(1,m0);
for i=1:N
z1(i)=10
end
for i=1:N
z2(i)=90
end
for i=1:m0
for j=i+1:m0
p1=rand(1,1);
p2=rand(1,1);
if p1>0.5
a1(i,j)=1;
a1(j,i)=0;
end
if p2>0.5
a2(i,j)=1;
a2(j,i)=0;
end
end
end
for k=m0+1:N
M=size(a1,1);p=zeros(1,M);
M1=size(a2,1);p1=zeros(1,M1);
x0=100*rand(1,1);y0=100*rand(1,1);
x1(k)=x0;y1(k)=y0;
x2(k)=x0;y2(k)=y0;
if length(find(a1==1))==0
p(:)=1/M;
else
for i=1:M
p(i)=length(a1(i,:)==1)/length(find(a1==1));
end
if length(find(a2==1))==0
p1(:)=1/M1;
else
for i=1:M1
p1(i)=length(a2(i,:)==1)/length(find(a2==1));
end
end
end
pp=cumsum(p);
pp1=cumsum(p1);
for i=1:m
random_data=rand(1,1);
random_data1=rand(1,1);
aa=find(pp>=random_data);jj=aa(1);
aa1=find(pp1>=random_data1);jj1=aa1(1);
a1(k,jj)=1;
a1(jj,k)=1;
a2(k,jj1)=1;
a2(jj1,k)=1;
end
end
plot3(x1,y1,z1,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',5);
hold on;
plot3(x2,y2,z2,'bo','MarkerEdgeColor','g','MarkerFaceColor','b','MarkerSize',5);
hold on;
for i=1:N
for j=i+1:N
if a1(i,j)~=0;
plot3([x1(i),x1(j)],[y1(i),y1(j)],[z1(i),z1(j)],'r','linewidth',1.2);
hold on;
end
end
end
axis equal;hold off
hold on
for i=1:N
for j=i+1:N
if a2(i,j)~=0;
plot3([x2(i),x2(j)],[y2(i),y2(j)],[z2(i),z2(j)],'b','linewidth',1.2);
hold on;
end
end
end
axis equal;hold off
hold on
for i=1:N
for j=i+1:N
p1=rand(1,1);
if p8>p1
a3(i,j)=1;a3(j,i)=1;
end
end
end
hold on
for i=1:N
for j=i+1:N
if a3(i,j)~=0
plot3([x1(i),x2(j)],[y1(i),y2(j)],[z1(i),z2(j)],'g','linewidth',1);
hold on;
end
end
end
axis equal;
hold off;
a4=[a1 a3
a3' a2]
% [DeD1,aver_DeD1,DeD13,aver_DeD13,DeD23,aver_DeD23,DeD2,aver_DeD2]=Degree_Distribution(a1,a2,a3)
% [mean_path,mean_path1]=Average_Path(a1,a2,a4)
% [mean_c,mean_c1,mean_c2]=Coefficient(a1,a2,a4)
小世界网络
N=12
K=4
p=0.5
p0=0.8
angle=0:2*pi/N:2*pi-2*pi/N;
x1=100*sin(angle);
y1=100*cos(angle);
x2=100*sin(angle);
y2=100*cos(angle);
for i=1:N
z1(i)=10
end
plot3(x1,y1,z1,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',5);
hold on;
for i=1:N
z2(i)=90
end
plot3(x2,y2,z2,'bo','MarkerEdgeColor','b','MarkerFaceColor','b','MarkerSize',5);
hold on;
a1=zeros(N);
a2=zeros(N);
for i=1:N
for j=i+1:i+K/2
jj=j;
if j>N
jj=mod(j,N);
end
a1(i,jj)=1;
a1(jj,i)=1;
a2(i,jj)=1;
a2(jj,i)=1;
end
end
for i=1:N
for j=i+1:i+K/2
jj=j;
if j>N
jj=mod(j,N);
end
p1=rand(1,1);
p2=rand(1,1);
if p1<p
a1(i,jj)=0;a1(jj,i)=0;a1(i,i)=inf;a=find(a1(i,:)==0);
rand_data=randi([1,length(a)],1,1);
jjj=a(rand_data);a1(i,jjj)=1;a1(jjj,i)=1;a1(i,i)=0;
end
if p2<p
a2(i,jj)=0;a2(jj,i)=0;a2(i,i)=inf;a=find(a2(i,:)==0);
rand_data=randi([1,length(a)],1,1);
jjj=a(rand_data);a2(i,jjj)=1;a2(jjj,i)=1;a2(i,i)=0;
end
end
end
for i=1:N
for j=i+1:N
if a1(i,j)~=0
plot3([x1(i),x1(j)],[y1(i),y1(j)],[z1(i),z1(j)],'r','linewidth',1.2);
hold on;
end
if a2(i,j)~=0
plot3([x2(i),x2(j)],[y2(i),y2(j)],[z2(i),z2(j)],'b','linewidth',1.2);
hold on;
end
end
end
axis equal;
hold off
hold on
for i=1:N
for j=i+1:N
p1=rand(1,1);
if p>p1
a3(i,j)=1;a3(j,i)=1;
end
end
end
hold on
for i=1:N
for j=i+1:N
if a3(i,j)~=0
plot3([x1(i),x2(j)],[y1(i),y2(j)],[z1(i),z2(j)],'g','linewidth',1);
hold on;
end
end
end
axis equal;
hold off;
a4=[a1 a3
a3' a2]
% [DeD1,aver_DeD1,DeD13,aver_DeD13,DeD23,aver_DeD23,DeD2,aver_DeD2]=Degree_Distribution(a1,a2,a3)
% [mean_path,mean_path1]=Average_Path(a1,a2,a4)
% [mean_c,mean_c1,mean_c2]=Coefficient(a1,a2,a4)
随机网络
N=10;
p=0.2
p8=0.1
for i=1:N
x1(i)=100*rand(1,1);
y1(i)=100*rand(1,1);
z1(i)=100;
end
for i=1:N
for j=i+1:N
p1=rand(1,1);
if p>p1
a1(i,j)=1;a1(j,i)=1;
end
end
end
figure;
c=length(find(a1==1))
plot3(x1,y1,z1,'bo','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',5);
hold on
for i=1:N
for j=i+1:N
if a1(i,j)~=0
plot3([x1(i),x1(j)],[y1(i),y1(j)],[z1(i),z1(j)],'r','linewidth',1);
hold on;
end
end
end
axis equal;
hold off;
hold on
for i=1:N
x2(i)=100*rand(1,1);
y2(i)=100*rand(1,1);
z2(i)=10;
end
for i=1:N
for j=i+1:N
p1=rand(1,1);
if p>p1
a2(i,j)=1;a2(j,i)=1;
end
end
end
c=length(find(a2==1))
plot3(x2,y2,z2,'bo','MarkerEdgeColor','g','MarkerFaceColor','b','MarkerSize',5);
hold on;
for i=1:N
for j=i+1:N
if a2(i,j)~=0
plot3([x2(i),x2(j)],[y2(i),y2(j)],[z2(i),z2(j)],'b','linewidth',1);
hold on;
end
end
end
axis equal;
hold off;
hold on
for i=1:N
for j=i+1:N
p1=rand(1,1);
if p8>p1
a3(i,j)=1;a3(j,i)=1;
end
end
end
hold on
for i=1:N
for j=i+1:N
if a3(i,j)~=0
plot3([x1(i),x2(j)],[y1(i),y2(j)],[z1(i),z2(j)],'g','linewidth',1);
hold on;
end
end
end
axis equal;
hold off;
a4=[a1 a3
a3' a2]
% [DeD1,aver_DeD1,DeD13,aver_DeD13,DeD23,aver_DeD23,DeD2,aver_DeD2]=Degree_Distribution(a1,a2,a3)
% [Clu,aver_Clu,max_Clu,min_Clu,Clu1,aver_Clu1,max_Clu1,min_Clu1]=Clustering(a1,a2,a3,a4)
% [mean_path,mean_path1,mean_path2]=Average_Path(a1,a2,a4)
% [mean_c,mean_c1,mean_c2]=Coefficient(a1,a2,a4)
% [mean_c,mean_c1,mean_c2]=Coefficient(a1,a2,a4)
% [mean_c,mean_c1]=Coefficient(a1,a4)
% [DeD,aver_DeD]=Degree_Distribution13(a1,a3)
% [DeD,aver_DeD]=Degree_Distribution1(a1)
% [DeD,aver_DeD]=Degree_Distribution2(a2)
% [DeD,aver_DeD]=Degree_Distribution23(a2,a3)
% N=12
% p=0.1
% for i=1:N
%
% x(i)=100*rand(1,1);
% y(i)=100*rand(1,1);
% end
% for i=1:N
% for j=i+1:N
% p1=rand(1,1);
% if p>p1
% A(i,j)=1;A(j,i)=1;
% end
% end
%
% end
% c=length(find(A==1))
% plot(x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','MarkerSize',8);
% hold on;
% for i=1:N
% for j=i+1:N
% if A(i,j)~=0
% plot([x(i),x(j)],[y(i),y(j)],'linewidth',1);
% hold on;
% end
% end
% end
% axis equal;
% hold off;
%
function [mean_path,mean_path1,mean_path2]=Average_Path(a1,a2,a4)
%求一个图的平均最短路径(Average Shortest Path Length)
N=size(a1,2)
len=length(a1);%节点个数
m = a1;
m(m==0)=len*2; %设置为最大距离的两倍,也就是不可达
N1=size(a4,2)
len1=length(a4);%节点个数
m1 = a4;
m1(m1==0)=len1*2; %设置为最大距离的两倍,也就是不可达
N2=size(a2,2)
len2=length(a2);%节点个数
m2 = a2;
m2(m2==0)=len2*2; %设置为最大距离的两倍,也就是不可达
for i=1:len
m(i,i)=0;%邻接矩阵的对角线元素均为0
end
if len<=1%少于一个点
mean_path = 0;
end
for k=1:len%弗洛伊德算法
for i=1:len
for j=1:len
if m(i,j)>m(i,k)+m(k,j)
m(i,j) = m(i,k)+m(k,j);
end
end
end
end
for i=1:len
m(m==len*2)=0;%不可达点的距离化为0
end
each_path = sum(m')/(length(m)-1);%每个点的平均最短路径长度,减一是减去到自己的距离(不存在)
mean_path = sum(sum(m'))/length(nonzeros(m'));%整个网络的平均最短路径长度
for i=1:len1
m1(i,i)=0;%邻接矩阵的对角线元素均为0
end
if len1<=1%少于一个点
mean_path1 = 0;
end
for k=1:len1%弗洛伊德算法
for i=1:len1
for j=1:len1
if m1(i,j)>m1(i,k)+m1(k,j)
m1(i,j) = m1(i,k)+m1(k,j);
end
end
end
end
for i=1:len1
m1(m1==len1*2)=0;%不可达点的距离化为0
end
each_path1 = sum(m1)/(length(m1)-1);%每个点的平均最短路径长度,减一是减去到自己的距离(不存在)
mean_path1 = sum(sum(m1))/length(nonzeros(m1));%整个网络的平均最短路径长度
for i=1:len2
m2(i,i)=0;%邻接矩阵的对角线元素均为0
end
if len2<=1%少于一个点
mean_path2 = 0;
end
for k=1:len2%弗洛伊德算法
for i=1:len2
for j=1:len2
if m2(i,j)>m2(i,k)+m2(k,j)
m2(i,j) = m2(i,k)+m2(k,j);
end
end
end
end
for i=1:len2
m2(m2==len2*2)=0;%不可达点的距离化为0
end
each_path2 = sum(m2)/(length(m2)-1);%每个点的平均最短路径长度,减一是减去到自己的距离(不存在)
mean_path2 = sum(sum(m2))/length(nonzeros(m2));%整个网络的平均最短路径长度
plot([1:N],each_path,'ro-');
xlabel('第一层每个用户得平均路径');
ylabel('每个节点得平均路径');
legend(num2str( mean_path),'Location','NorthEastOutside');
figure;
plot([1:N1],each_path1,'go-');
title('平均路径');
xlabel('整个网络网络每个用户得平均路径');
ylabel('每个节点得平均路径');
legend(num2str( mean_path1),'Location','NorthEastOutside');
figure;
plot([1:N2],each_path2,'bo-');
title('平均路径');
xlabel('网络每个用户得平均路径');
ylabel('第二层每个节点得平均路径');
legend(num2str( mean_path2),'Location','NorthEastOutside');