度,聚类系数,平均路径长度程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 [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 [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

%% 算法2:用时间量级O(MN)的广度优先算法求解一个含N个节点和M条边的网络图的平均路径长度

相关文档
最新文档