clear; rankK = 2; %Create data X = [1 0 0 1 0 0 0 0 0; 1 0 1 0 0 0 0 0 0; 1 1 0 0 0 0 0 0 0; 0 1 1 0 1 0 0 0 0; 0 1 1 2 0 0 0 0 0; 0 1 0 0 1 0 0 0 0; 0 1 0 0 1 0 0 0 0; 0 0 1 1 0 0 0 0 0; 0 1 0 0 0 0 0 0 1; 0 0 0 0 0 1 1 1 0; 0 0 0 0 0 0 1 1 1; 0 0 0 0 0 0 0 1 1]; [U S V] = svd(X); size(U); size(S); size(V); Uk = U(:,1:rankK); Sk = S(1:rankK,1:rankK); Vk = V(:,1:rankK); %Create a query that is the same as the first document q=[1 1 1 0 0 0 0 0 0 0 0 0]'; qconcept = inv(Sk)*transpose(Uk)*q; dot = qconcept' * Vk'; angle = dot ./ norm(qconcept); for i = 1:9 angle(1,i)=angle(1,i)./norm(Vk(i,:)); end;