Which SVD algorithm implementation is used in MATLAB?
13 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Walter Roberson
2022 年 2 月 22 日
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.
回答 (1 件)
Steven Lord
2022 年 2 月 3 日
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."
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/883340/image.png)
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.
参考
カテゴリ
Help Center および File Exchange で Eigenvalues についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!