Which SVD algorithm implementation is used in MATLAB?
13 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi,
I am comparing singular value decomposition function [U,S,V] = svd(A) to some C implementations of the algorithm. However, I am getting somewhat different results: for example, columns of the output matrix U are mixed-up, or some output values have different sign, etc.
Does anyone know which SVD algorithm implementation is used in MATLAB?
4 Commenti
Walter Roberson
il 22 Feb 2022
I am not sure how it is relevant that MKL is copyrighted? LAPACK is copyrighted too, with a modified BSD license.
MKL is probably closed source, but you did not indicate that you needed source access; for everything you have mentioned so far you only need to be able to link against it.
Risposte (1)
Steven Lord
il 3 Feb 2022
Keep in mind that the SVD of a matrix is not unique. Quoting from Wikipedia: "Non-degenerate singular values always have unique left- and right-singular vectors, up to multiplication by a unit-phase factor (for the real case up to a sign). Consequently, if all singular values of a square matrix M are non-degenerate and non-zero, then its singular value decomposition is unique, up to multiplication of a column of U by a unit-phase factor and simultaneous multiplication of the corresponding column of V by the same unit-phase factor."
A = magic(5);
[U, S, V] = svd(A);
format longg
check1 = U*S*V' - A
U2 = -U;
V2 = -V;
check2 = U2*S*V2' - A
The elements of check1 and check2 both look sufficiently small as to be close enough to 0 to say both (U, S, V) and (U2, S, V2) satisfy the SVD contract. It's possible the columns of the output U aren't "mixed up" they're just a different (correct) answer (when combined with the corresponding V) than you expected.
Vedere anche
Categorie
Scopri di più su Linear Algebra in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!