logo资料库

复杂网络的Matlab实现.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
度分布 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 else disp('该网络图只是由一些孤立点组成'); return; figure; bar([1:N],DeD); xlabel('节点编号n'); ylabel('各节点的度数K'); title('网络图中各节点的度的大小分布图'); %网络图中节点的度数最大为M,但要同时考虑到度为0的节点的存在性 end figure; M=max(DeD); for i=1:M+1; N_DeD(i)=length(find(DeD==i-1)); % DeD=[2 2 2 2 2 2] 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 for i=1:N for j=1:N end end end %Floyd算法求解任意两点的最短距离 if D(i,j)>D(i,k)+D(k,j) D(i,j)=D(i,k)+D(k,j); end aver_D=sum(sum(D))/(N*(N-1)) %平均路径长度 if aver_D==inf disp('该网络图不是连通图'); end %% 算法2: 用时间量级O(MN)的广度优先算法求解一个含N个节点和M条边的网络图的平 均路径长度 聚类系数 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); %寻找子图的邻居节点
disp(['节点',int2str(i),'为孤立节点,其聚类系数赋值为0']); C(i)=0; disp([' 节 点',int2str(i),' 只 有 一 个 邻 居 节 点 , 其 聚 类 系 数 赋 值 为 B=A(aa,aa) % 抽取子图的邻接矩阵 C(i)=length(find(B==1))/(m*(m-1)); if isempty(aa) else m=length(aa); if m==1 0']); C(i)=0; else end end end aver_C=mean(C) 方法二 m=find(a(i,:)); ta=a(m,m); Lta=tril(ta); if isempty(m) elseif length(m)==1 c(i)=0; c(i)=0; else end end TC=mean(c); function [TC,c]=Clustering_Coefficient(a) n=length(a); for i=1:n c(i)=sum(sum(Lta))/nchoosek(length(m),2);
分享到:
收藏