FormationControlSimulation/SOURCE/networks-toolbox/pearson.m

33 lines
1.1 KiB
Matlab
Raw Normal View History

2019-06-17 14:31:50 +07:00
% Calculating the Pearson coefficient for a degree sequence.
% Source: "Assortative Mixing in Networks", M.E.J. Newman, Phys Rev Let 2002
%
% INPUTs: M - (adjacency) matrix, nxn (square)
% OUTPUTs: r - Pearson coefficient
%
% Other routines used: degrees.m, numEdges.m, adj2inc.m
% See also pearsonW.m
% GB: last updated, October 1, 2012
function r = pearson(M)
[degs,~,~] = degrees(M); % get the total degree sequence
m = numEdges(M); % number of edges in M
inc = adj2inc(M); % get incidence matrix for convience
% j,k - remaining degrees of adjacent nodes for a given edge
% sumjk - sum of all products jk
% sumjplusk - sum of all sums j+k
% sumj2plusk2 - sum of all sums of squares j^2+k^2
% compute sumjk, sumjplusk, sumj2plusk2
sumjk = 0; sumjplusk = 0; sumj2plusk2 = 0;
for i=1:m
[v] = find(inc(:,i)==1);
j = degs(v(1))-1; k = degs(v(2))-1; % remaining degrees of 2 end-nodes
sumjk = sumjk + j*k;
sumjplusk = sumjplusk + 0.5*(j+k);
sumj2plusk2 = sumj2plusk2 + 0.5*(j^2+k^2);
end
% Pearson coefficient formula
r = (sumjk - sumjplusk^2/m)/(sumj2plusk2-sumjplusk^2/m);