您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 投融资/租赁 > 复杂网络主要拓扑参数的matlab实现
function[DeD,aver_DeD]=Degree_Distribution(A)%%求网络图中各节点的度及度的分布曲线%%求解算法:求解每个节点的度,再按发生频率即为概率,求P(k)%A————————网络图的邻接矩阵%DeD————————网络图各节点的度分布%aver_DeD———————网络图的平均度N=size(A,2);DeD=zeros(1,N);fori=1:N%DeD(i)=length(find((A(i,:)==1)));DeD(i)=sum(A(i,:));endaver_DeD=mean(DeD);ifsum(DeD)==0disp('该网络图只是由一些孤立点组成');return;elsefigure;bar([1:N],DeD);xlabel('节点编号n');ylabel('各节点的度数K');title('网络图中各节点的度的大小分布图');endfigure;M=max(DeD);fori=1:M+1;%网络图中节点的度数最大为M,但要同时考虑到度为0的节点的存在性N_DeD(i)=length(find(DeD==i-1));%DeD=[222222]endP_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);fori=1:Naa=find(A(i,:)==1);%寻找子图的邻居节点ifisempty(aa)disp(['节点',int2str(i),'为孤立节点,其聚类系数赋值为0']);C(i)=0;elsem=length(aa);ifm==1disp(['节点',int2str(i),'只有一个邻居节点,其聚类系数赋值为0']);C(i)=0;elseB=A(aa,aa)%抽取子图的邻接矩阵C(i)=length(find(B==1))/(m*(m-1));endendendaver_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.fori=1:ND(i,i)=0;endfork=1:N%Floyd算法求解任意两点的最短距离fori=1:Nforj=1:NifD(i,j)D(i,k)+D(k,j)D(i,j)=D(i,k)+D(k,j);endendendendaver_D=sum(sum(D))/(N*(N-1))%平均路径长度ifaver_D==infdisp('该网络图不是连通图');end%%算法2:用时间量级O(MN)的广度优先算法求解一个含N个节点和M条边的网络图的平均路径长度可以求出复杂网络中两节点间的距离以及平均路径长度,各节点的度及度的分布曲线,以及节点的聚类系数。Youcanfindoutthedistanceandaveragepathlengthbetweenthetwonodesincomplexnetworks.youcanalsofindoutdegreeanddegreedistributioncurveofeachnode,andthenodeclusteringcoefficient.
本文标题:复杂网络主要拓扑参数的matlab实现
链接地址:https://www.777doc.com/doc-4630716 .html