您的位置:首页 > 理论基础 > 计算机网络

复杂网络建模 社交网络图的一些计算代码(不全欢迎补充)MATLAB

2014-12-03 17:42 627 查看

function [C,aver_C,max_C,min_C]=Clustering(A)

%%求聚类系数

%A--------------邻接矩阵

%C--------------聚类系数

%aver_C---------整个网络图的平均聚类系数

A=xlsread('name.xls');

%A=xlsread('hometown.xls');

%A=xlsread('dialect.xls');

N=size(A,2);

C=zeros(1,N);

for i=1:N

    a=find(A(i,:)==1); %寻找子图的邻居节点

    b=find(A(:,i)==1);

    m=union(a,b');

    k=length(m);

    if k==1

        disp(['第',int2str(i),'个节点只有一个邻居节点,其聚类系数为0']);

        C(i)=0;

    else

        B=A(m,m);

        C(i)=length(find(B==1))/(k*(k-1));

    end

end

aver_C=mean(C);

max_C=max(C);

n=find(C==0);

a=C;

a(n)=inf;

min_C=min(a);

figure;

bar([1:N],C);

xlabel('学生节点编号');

ylabel('各节点的聚类系数K');

title('knowing someone name节点的聚类系数分布图');

//求点的聚类系数

%计算图的core

function cores=coreness(graphmat)

graphmat=xlsread('name.xls');

n=size(graphmat,1);

deg=zeros(1,n);

ndin=zeros(1,n);

ndout=zeros(1,n);

%for i=1:N

 %   ndin(i)=sum(A(:i));  

  %  ndout(i)=sum(A(i:)); 

%end

ndin=sum(graphmat);  %节点的入度

ndout=sum(graphmat');%节点的出度

deg=ndin+ndout;

[incdeg,nodeind]=sort(deg);  %节点的度数从小到大排列(incdeg),以及记录初始位置

vert=[incdeg;nodeind]; %将二者存到矩阵里

for i=1:n

    k=1;

    for j=1:n

        if graphmat(i,j)

            neighbour{i}(k)=j;%找出节点i的所有邻居点,并且记录neighbour中,第J各节点的度为K

            k=k+1;

        end

    end

end

if deg(n)==0

    neighbour{n}=[];

end

if prod(deg)==0

    j=0;

    for i=1:n

        if deg(i)==0

            j=j+1;

            N(j)=i;%删除孤立节点

        end

    end

    j=size(N,2);

    for t=1:j

        vert(:,t)=[];

    end

end

m=size(vert,2);

for i=1:m

    cores(vert(2,1))=vert(1,1)-1;

    for j=1:size(neighbour{vert(2,1)},2) 

         if deg(neighbour{vert(2,1)}(j))>vert(1,1)

             deg(neighbour{vert(2,1)}(j))=deg(neighbour{vert(2,1)}(j))-1;

         end

    end

    vert(:,1)=[];

    for k=1:(m-i)

        vert(1,k)=deg(vert(2,k));

    end

    vert=sortrows(vert')';

end

for i=1:n

    if deg(i)==0

        cores(i)=0;

    end

end

figure;

bar([1:n],cores);

xlabel('学生节点编号');

ylabel('各节点的coreness');

title('knowing someone name 节点的coreness分布图');       

 //求点的core

其他的网上资源较多就不上传了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息