ECG-Kit 1.0
(986 bytes)
function [P,T,L,r,centerX,cX]=kernelEVD(X);
%KERNELEVD (kernel eigenvalue decomposition) performs a singular value decomposition
% of a matrix with more columns than rows.
%
% Required input:
% x : data matrix of size n by p where n < p (else classSVD is invoked)
%
% I/O: [P,T,L,r,centerX,cX]=kernelEVD(X);
%
% This function is part of LIBRA: the Matlab Library for Robust Analysis,
% available at:
% http://wis.kuleuven.be/stat/robust.html
%
% Written by Sabine Verboven, Mia Hubert
% Last Update: 17/06/2003
[n,p]=size(X);
if n > p
[P,T,L,r,centerX,cX]=classSVD(X);
else
cX=mean(X);
centerX=X-repmat(cX,n,1);
[P,L]=eig(centerX*centerX'/(n-1));
[L,I]=greatsort(diag(L));
P=P(:,I);
tol=n*max(L)*eps;
r=sum(L>tol);
L=L(1:r);
loadings=(centerX/sqrt(n-1))'*P(:,1:r)*diag(1./sqrt(L));
%normalizing loadings by dividing by the sqrt(eigenvalues)
T=centerX*loadings;
P=loadings;
end