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



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

其他的网上资源较多就不上传了

你可能感兴趣的