function A=WS_net ()
%%% 从有N个节点,每个节点有2K个邻居节点的最近邻耦合网络图通过随机化重连生成WS小世界网路
%% A 返回生成网络的邻接矩阵
disp ('该程序生成WS小世界网路:');
N=100;
K=6;
p=0.2;
if K>floor (N/2)
disp ('输入的K值不合法')
return;
end
angle=0:2*pi/N:2*pi-2*pi/N; %% 生成最近邻耦合网络的各节点坐标
x=100*sin (angle);
y=100*cos (angle);
plot (x,y,'ro','MarkerEdgeColor','g','MarkerFaceColor','r','markersize',8);
hold on;
%%
A=zeros (N);
for i=1:N
for j=i+1:i+K
jj=j;
if j>N
jj=mod (j,N);
end
A (i,jj)=1;
A (jj,i)=1; %% 生成最近邻耦合网络的邻接矩阵
end
end
for i=1:N
for j=i+1:i+K
jj=j;
if j>N
jj=mod (j,N);
end
p1=rand (1,1);
if p1<p %% 生成的随机数小于p,则边进行随机化重连,否则,边不进行重连
A (i,jj)=0;A (jj,i)=0; % 重连策略:先断开原来的边,再在未连的边中随机选择另一个节点,与原节点连接。
A (i,i)=inf; a=find (A (i,:)==0);
z=length(a);
rand_data=randi ([1,1],size(z));
jjj=a (rand_data);
A (i,jjj)=1;A (jjj,i)=1;
A (i,i)=0;
end
end
end
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.2);
hold on; %% 画出WS小世界网络图
end
end
end
axis equal;
hold off
%%
[C,aver_C]=Clustering_Coefficient (A);
[DeD,aver_DeD]=Degree_Distribution (A);
[D,aver_D]=Aver_Path_Length (A);
%disp (['该随机图的平均路径长度为:',num2str (aver_D)]); %% 输出该网络的特征参数
% disp (['该随机图的聚类系数为:',num2str (aver_C)]);
%disp (['该随机图的平均度为:',num2str (aver_DeD)]);
function [C,aver_C]=Clustering_Coefficient(A)
% 求网络图中各节点的聚类系数及整个网络的聚类系数
% 求解算法:求解每个节点的聚类系数,找某节点的所有邻居,这些邻居节点构成一个子图
% 从A中抽出该子图的邻接矩阵,计算子图的边数,再根据聚类系数的定义,即可算出该节点的聚类系数
%A————————网络图的邻接矩阵
%C————————网络图各节点的聚类系数
%aver———————整个网络图的聚类系数
N=size(A,2);
C=zeros(1,N);
for i=1:N
aa=find(A(i,:)==1); %寻找子图的邻居节点
if isempty(aa)
disp(['节点',int2str(i),'为孤立节点,其聚类系数赋值为0']);
C(i)=0;
else
m=length(aa);
if m==1
disp(['节点',int2str(i),'只有一个邻居节点,其聚类系数赋值为0']);
C(i)=0;
else
B=A(aa,aa); % 抽取子图的邻接矩阵
C(i)=length(find(B==1))/(m*(m-1));
end
end
end
aver_C=mean(C);
%%
function [DeD,aver_DeD]=Degree_Distribution(A)
%求网络图中各节点的度及度的分布曲线
%求解算法:求解每个节点的度,再按发生频率即为概率,求P(k)
%A————————网络图的邻接矩阵
%DeD————————网络图各节点的度分布
%aver_DeD———————网络图的平均度
N=size(A,2);
DeD=zeros(1,N);
for i=1:N
% DeD(i)=length(find((A(i,:)==1)));
DeD(i)=sum(A(i,:));
end
aver_DeD=mean(DeD);
if sum(DeD)==0
disp('该网络图只是由一些孤立点组成');
return;
else
figure;
bar([1:N],DeD);
xlabel('节点编号n');
ylabel('各节点的度数K');
title('网络图中各节点的度的大小分布图');
end
figure;
M=max(DeD);
for i=1:M+1; %网络图中节点的度数最大为M,但要同时考虑到度为0的节点的存在性
N_DeD(i)=length(find(DeD==i-1));
end
P_DeD=zeros(1,M+1);
P_DeD(:)=N_DeD(:)./sum(N_DeD);
bar([0:M],P_DeD,'r');
xlabel('节点的度 K');
ylabel('节点度为K的概率 P(K)');
title('网络图中节点度的概率分布图');
%%
function [D,aver_D]=Aver_Path_Length(A)
%求复杂网络中两节点的距离以及平均路径长度
%求解算法:首先利用Floyd算法求解出任意两节点的距离,再求距离的平均值得平均路径长度
% A————————网络图的邻接矩阵
% D————————返回值:网络图的距离矩阵
% aver_D———————返回值:网络图的平均路径长度
N=size(A,2);
D=A;
D(find(D==0))=inf; %将邻接矩阵变为邻接距离矩阵,两点无边相连时赋值为inf,自身到自身的距离为0.
for i=1:N
D(i,i)=0;
end
for k=1:N %Floyd算法求解任意两点的最短距离
for i=1:N
for j=1:N
if D(i,j)>D(i,k)+D(k,j)
D(i,j)=D(i,k)+D(k,j);
end
end
end
end
aver_D=sum(sum(D))/(N*(N-1)); %平均路径长度
if aver_D==inf
disp('该网络图不是连通图');
end
WS_net.zip_小世界模型
版权申诉
7 浏览量
2022-09-23
02:50:35
上传
评论
收藏 2KB ZIP 举报
JonSco
- 粉丝: 72
- 资源: 1万+
最新资源
- Python 程序语言设计模式思路-创建型模式:原型模式:通过复制现有对象来创建新对象,面向对象编程
- 卸载软件geek卸载软件geek
- Python 程序语言设计模式思路-创建型模式:单例模式,确保一个类的唯一实例(装饰器)面向对象编程、继承
- skywalking-plugins.jar skywalking-alarm.jar
- 独栋别墅图纸D020-两层-10.00&11.00米- 施工图.dwg
- Python 程序语言设计模式思路-创建型模式:工厂模式,创建对象的统一接口,封装对象的创建逻辑
- python自学教程-05-json数据格式的介绍.ev4.rar
- python自学教程-04-自定义JavaScript.ev4.rar
- 《淘宝后台系统...》
- skywalking-plugins.jar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈