I am using TDecompSVD to decompose a ~ (1500 x 150) sized matrix. The decomposition seems to work, but I dont really understand the output as the matrix V is not orthogonal as I would expect. When I run the following…
TDecompSVD svd(A); cout << svd.Decompose() << endl; TMatrixD V = svd.GetV(); TMatrixD id = V.Transpose(V) * V; cout << "ID " << id.Sum() <<" "<< id.Min() <<" "<<id.Max()<< endl;
… then I get this output …
1 ID 1.76085 -0.581951 1
… when I would expect the minimum value to be 0 and the sum to be just equal to the dimension. When I looked at the matrix id in detail, I found that its only the first few rows that have non zero entries.
What can go wrong with the SVD? Is there a way to fix this? I thought its guaranteed to get orthogonal matrices out. Am I doing something completely wrong?
ps: actually I am not 100% about the usage of transpose. Isnt it a bit strange that I have to put the matrix as parameter and still the method isnt static?