i want the svd function in matlab to give me two different values for the same matrix , i mean the U and V , currently im getting the same everytime i run

 채택된 답변

Christine Tobler
Christine Tobler 2020년 3월 5일

1 개 추천

The linear algebra functions in MATLAB are run-to-run reproducible, meaning if you call them twice with the exact same input, you get the exact same output.
If you want to randomize the output, you could pre-multiply the matrix with two random orthogonal matrices, and then apply does matrices to the outputs U and V:
[m, n] = size(A);
U0 = orth(randn(m));
V0 = orth(randn(n));
[U, S, V] = svd(U0*A*V0');
U = U0'*U;
V = V0'*V;
norm(A - U*S*V', 'fro')
This will still return the same singular values (which are unique), but returns different singular vectors.

추가 답변 (1개)

KALYAN ACHARJYA
KALYAN ACHARJYA 2020년 3월 5일

0 개 추천

data_test=magic(3);
[U,S,V]=svd(data_test)
Result
U =
-0.5774 0.7071 0.4082
-0.5774 0.0000 -0.8165
-0.5774 -0.7071 0.4082
S =
15.0000 0 0
0 6.9282 0
0 0 3.4641
V =
-0.5774 0.4082 0.7071
-0.5774 -0.8165 -0.0000
-0.5774 0.4082 -0.7071
>>

댓글 수: 1

Fethi Bencherki
Fethi Bencherki 2020년 3월 5일
편집: Fethi Bencherki 2020년 3월 5일
i might have formulated the question in a wrong manner , see normally svd is non unique , but due to some reason svd(A) is outputing the same results , i want it instead to give me different U, V everytime i run , for the same matrix A ofcourse

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터 및 File Exchange에서 Random Number Generation에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by