The discrepancy stems from the fact that the Singular Value Decomposition is not unique. For any matrix A, there can be many different orthogonal matrices U and V and diagonal matrices S for which U*S*V' is within roundoff error of A. Specifically norm(U*S*V'-A)/norm(A) is roughly eps(max(size(A))). There is no guarantee that V is close to some "correct" V, or that the V's from different machines, operating systems, or BLAS are close to each other.
As an extreme example, take A to be the zero matrix. Take S to be the diagonal matrix with zeros on the diagonal (which happens to also be the zero matrix). Now take ANY orthogonal U and ANY orthogonal V of appropriate size. Then U*S*V' equals A exactly. No roundoff in this example. But one day's V will not equal another's.
To check the validity of an SVD, take the U, S, and V you get on any machine and check that U*S*V' is close to A (relative to norm(A)). If it is, then you have a valid SVD. Due to the reasons stated above, it is not meaningful to compare the U's or V's from different machines, especially when A is rank deficient or has other multiple singular values.
Best Answer