Matlab——求网络相关参数

一.上机要求

用Matlab编程实现相关网络参数的计算,输出相关信息:

  1. 度分布和平均度。
  2. 联合度分布。
  3. 各节点的最近邻平均度值Knni。
  4. 该网络是否同配网络。
  5. 该网络是否是正相关网络。
  6. 计算该网络的网络直径D和平均路径长度L。

二.算法设计及实现

命令行:

clc,clear;format rat
n=6;a=zeros(6);
a(1,[2 3 5])=1;a(2,[3 4])=1;
a(3,6)=1;a(4,6)=1;
a=a+a';
d=sum(a); 						%计算邻接矩阵的列和,即各节点的度
degrange=minmax(d);			%求度取值的最小值和最大值
ud=[degrange(1):degrange(2)]		%显示度的取值
pinshu=hist(d,ud);				%求度取值的频数
df=[ud:pinshu/n]					%求度的频率分布表
ave_degree=mean(d)				%平均度
M=sum(d)/2;					%计算总边数,边数为总度数的1/2
[i,j]=find(triu(a));					%找矩阵a上三角元素中非零元素所在的行标和列标,即每条边的端点
ki=d(i);kj=d(j);					%提取所有边的起点度和终点度
kij=[ki' kj'];kij=sort(kij,2);			%逐行从小到大排列
bpin=[];							%联合度分布初始化
for i=1:length(ud)
for j=i:degrange(2)
b(i,j)=0;kk=[];
for k=1:size(kij,1)
       b(i,j)=b(i,j)+length(findstr(kij(k,:),[i,j]));
       if length(findstr(kij(k,:),[i,j]))
           kk=[kk,k];			%记录找到的数据
       end
    end
       kij(kk,:)=[];				%删除已找到的数据
       bpin=[bpin,[i;j;b(i,j)/M]];
end
end
bpin								%显示联合度分布,第1,2行为度值,第3行为频率
knni=d*a./d							%计算邻近平均值
for i=1:length(ud)
       ind=(d==ud(i));
       knn(i)=sum(knni(ind))/pinshu(i);
end
  knn=[ud;knn]						%显示邻近平均值
  r=mycorrelations(a)				%计算相关系数
[D,max_D,aver_D]=Aver_Path_Length(a);		%计算网络直径和网络平均距离

函数1:求相关系数

输出参数r为相关系数,输入a为邻接矩阵。

function r=mycorrelations(a)
d=sum(a);					%计算每个结点的度
M=sum(d)/2;				%计算总边数,边数为总度数的一半
[i,j]=find(triu(a));				%找a矩阵上三角元素中非零元素所在的行标和列标,即每条边的两个端点
ki=d(i);kj=d(j);				%提取所有边的起点度和终点度
r=(ki*kj'/M-(sum(ki+kj)/2/M)^2)/(sum(ki.^2+kj.^2)/2/M-(sum(ki+kj)/2/M)^2);
end

函数2:求网络直径和平均路径长度

输出max_D为网络直径,aver_D为平均路径长度。输入a为邻接矩阵。sss

function [D,max_D,aver_D]=Aver_Path_Length(A)
 N=size(A,1);	 %求矩阵A的列数(结点数)
 D=A;
 D(D==0)=inf;    %将邻接矩阵变为邻接距离矩阵,两点无边相连时赋值为inf,自身到自身的距离为0.
 for i=1:N           
     D(i,i)=0;       
 end   
 for k=1:N            %Floyd算法求解任意两点的最短距离
     for i=1:N
         for j=1:N
             if D(i,j)>D(i,k)+D(k,j)
                D(i,j)=D(i,k)+D(k,j);
             end
         end
     end
 end
 max_D=max(max(D));
 disp("网络直径为:");
 disp(max_D);
 aver_D=sum(sum(D))/(N*(N-1));  %平均路径长度
 disp("平均路径长度为:");
 disp(aver_D);
 if aver_D==inf
     disp("该网络图不是连通图.");
 end

三.  运行结果

Matlab——求网络相关参数_第1张图片

Matlab——求网络相关参数_第2张图片 

可见,随着k的增加,knn下降,该网络为异配网络,r<0,该网络为负相关网络。

网络直径为3,即任意两个节点之间距离最大值为3。平均路径长度为5/3。

相关系数的表达式为:

Matlab——求网络相关参数_第3张图片

你可能感兴趣的:(matlab,开发语言,矩阵)