function [P,T,L,r,centerX,cX]=classSVD(x)

%CLASSSVD performs the singular value decomposition of a matrix with more
% rows than columns (uses svd.m)
%
% Required input: 
%          x : data matrix of size n by p where n>p
%
% 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: 06/07/2004

[n,p]=size(x); 

if n==1
    error('The sample size is 1. No SVD can be performed.')
end
cX=mean(x);
centerX=x-repmat(cX,n,1); 
[U,S,loadings]=svd(centerX./sqrt(n-1),0); 
eigenvalues=diag(S).^2;
tol = max([n p])*eigenvalues(1)*eps;
r= sum(eigenvalues>tol);
L=eigenvalues(1:r);
P=loadings(:,1:r);
T=centerX*P; 

