185
D2 = sparse(n,n);
for i=1:n
if D(i,i) ˜= 0
D2(i,i)=1/D(i,i)ˆ0.5;
end
end
Lsym = D2 * L * D2; % L=Dˆ(-0.5) * L * Dˆ(-0.5);
Lsym= (Lsym + Lsym’)/2;
if k == n
[Vector,eigenvalue] = eig(Lsym);
e = diag(eigenvalue);
[e,IXY] = sort(e,1,’ascend’);
Vector = Vector(:,IXY);
else
[Vector,eigenvalue] = eigs(2 * eye(n) - Lsym,k);
e = 2 - diag(eigenvalue);
end
varargout{1} = Vector;
varargout{2} = e;
% random walk normalized graph-Laplacian
elseif strcmp(type,’rw’) || strcmp(type,’Rw’) || strcmp(type,’RW’)
display(’Random walk Laplacian decomposition’);
D2 = sparse(n,n); % D2= Dˆ(-0.5);
for i=1:n
if D(i,i) ˜= 0
D2(i,i) = 1/D(i,i)ˆ.5;
end
end
Lsym = D2 * L * D2; %L=Dˆ(-0.5) * L * Dˆ(-0.5);
Lsym = (Lsym + Lsym’)/2;
if k == n
[Vector,eigenvalue] = eig(Lsym);
e = diag(eigenvalue);
else
[Vector,eigenvalue] = eigs(2 * eye(n)-Lsym,k);
e=2-diag(eigenvalue);
end
Vector = D2 * Vector;
varargout{1} = Vector;
varargout{2} = e;
else
error(’Type cannot be identified.’);
end
function [varargout] = DirLaplacian(W, k)
% Creates spectral embedding from a directed adjacency matrix
%
% The matrix W is the weighted adjacency matrix of a directed graph.
% k = number of eigenvectors.
% Vout = the eigenvector of out versions of nodes
% Vin = the eigenvector of in versions of nodes
% E = the diagonal matrix of Laplacian eigenvalues
% varargout = cell array of results
%
1: Vout
%
2: Vin
D2 = sparse(n,n);
for i=1:n
if D(i,i) ˜= 0
D2(i,i)=1/D(i,i)ˆ0.5;
end
end
Lsym = D2 * L * D2; % L=Dˆ(-0.5) * L * Dˆ(-0.5);
Lsym= (Lsym + Lsym’)/2;
if k == n
[Vector,eigenvalue] = eig(Lsym);
e = diag(eigenvalue);
[e,IXY] = sort(e,1,’ascend’);
Vector = Vector(:,IXY);
else
[Vector,eigenvalue] = eigs(2 * eye(n) - Lsym,k);
e = 2 - diag(eigenvalue);
end
varargout{1} = Vector;
varargout{2} = e;
% random walk normalized graph-Laplacian
elseif strcmp(type,’rw’) || strcmp(type,’Rw’) || strcmp(type,’RW’)
display(’Random walk Laplacian decomposition’);
D2 = sparse(n,n); % D2= Dˆ(-0.5);
for i=1:n
if D(i,i) ˜= 0
D2(i,i) = 1/D(i,i)ˆ.5;
end
end
Lsym = D2 * L * D2; %L=Dˆ(-0.5) * L * Dˆ(-0.5);
Lsym = (Lsym + Lsym’)/2;
if k == n
[Vector,eigenvalue] = eig(Lsym);
e = diag(eigenvalue);
else
[Vector,eigenvalue] = eigs(2 * eye(n)-Lsym,k);
e=2-diag(eigenvalue);
end
Vector = D2 * Vector;
varargout{1} = Vector;
varargout{2} = e;
else
error(’Type cannot be identified.’);
end
function [varargout] = DirLaplacian(W, k)
% Creates spectral embedding from a directed adjacency matrix
%
% The matrix W is the weighted adjacency matrix of a directed graph.
% k = number of eigenvectors.
% Vout = the eigenvector of out versions of nodes
% Vin = the eigenvector of in versions of nodes
% E = the diagonal matrix of Laplacian eigenvalues
% varargout = cell array of results
%
1: Vout
%
2: Vin
