在网络规模不是太大时(网络节点小于1000为最佳),用matlab里graphallshortestpaths函数求解网络的效率是比较简单地,下面是求解无向网络效率程序
%全局效率
A=zeros(5,5);
A(1,2)=1;A(2,1)=1;A(2,3)=1;A(3,2)=1;A(1,3)=1;A(3,1)=1;A(4,2)=1;
A(2,4)=1;A(3,4)=1;A(4,3)=1;A(5,2)=1;A(2,5)=1;A(3,5)=1;A(5,3)=1;
% %%%%%%%%%%%%%%%%%%%%%%%只需把连接矩阵换成对应的矩阵即可
A=sparse(A);
ShortPath=1./graphallshortestpaths(A);
ShortPath(ShortPath==inf)=0;
Eglob=(1/(length(A)*(length(A)-1)))*sum(sum(ShortPath))
%局部效率
A=zeros(5,5);
A(2,3)=1;A(3,2)=1;A(5,2)=1;A(2,5)=1;A(3,5)=1;A(5,3)=1;
%%%%%%%%%%%%%%%%%%%只需把连接矩阵换成对应的矩阵即可
Eloca=0;
for i=1:length(A)
Neigh=find(A(i,:)==1);
if numel(Neigh)>1
NeighPath=A(Neigh,Neigh);
NeighPath=sparse(NeighPath);
ShortPath=1./graphallshortestpaths(NeighPath);
ShortPath(ShortPath==inf)=0;
Eloca=Eloca+(1/(length(NeighPath)*(length(NeighPath)-1)))*sum(sum(ShortPath));
end
end
Eloca=1./(length(A))*Eloca