gusucode.com > 复杂网络中聚类系数与度度关联系数的matlab Clustering_Coefficient源码程序 > Clustering_Coefficient.m

    
function ACC=Clustering_Coefficient(Links_M)

%计算网络的聚类系数
%输入为网络的邻接矩阵
%输出为标量的网络的聚类系数:ACC
%算法的思想是:对每一个节点i找到它的邻居,并记录邻居的下标,然后在这些邻居中找大于0的数的总个数(也就是总边数)


%注意Matlab中find()子函数的调用,查找大于零的元素并返回其下标

Links_M0=Links_M;

n0=length(Links_M0);    %矩阵的维数

CC0=sparse(n0,1);       %存放每个节点的所对应的聚类系数

TCC=0;                   %初始化总的聚类系数

for i=1:n0
    
    i_neighbor=find(Links_M0(i,:));      %查找i点的邻居,就是Links(i,j)=1的点, 返回的是邻居节点下标的组成的向量
    
    i_neighbor_number=length(i_neighbor);  %节点i的邻居的数目
    
   if  i_neighbor_number>=2                %注如果邻居数为1的话,那么CC(i)=0, 无需计算,所以从邻居数大于等于2开始算
        
       S=Links_M(i_neighbor,i_neighbor);      %抽取i节点的所有的邻居所对应的行,列
        
       CC0(i)=sum(S(:))/(i_neighbor_number*(i_neighbor_number-1));    %注意一个节点其度的和等于其变数的两倍,sum(S(:))表示矩阵S所有元素的和=度,
                                                        %计算节点i的聚类系数
                                                                     
    end
    
end

TCC=full(sum(CC0));  %总的聚类系数

ACC=TCC/n0;          %网络的平均聚类系数