function [U,S,V] = mysvd(A); [m,n] = size(A); S = zeros(n,n); B = A'*A; [VB, S2] = eig(B); for i = 1:n V(:,i) = VB(:,n-i+1); S(i,i) = S2(n-i+1,n-i+1)^0.5; if S(i,i) == 0 Sinv(i,i) = 0.0; else Sinv(i,i) = 1/S(i,i); end end compass(V(1,:), V(2,:)); hold on; U = A*V*Sinv S V compass(U(1,:),U(2,:),'r'); hold off;