how to random initialize svd function in matlab??

조회 수: 1 (최근 30일)
Fethi Bencherki
Fethi Bencherki 2020년 3월 5일
답변: Christine Tobler 2020년 3월 5일
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일
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일
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

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

카테고리

Help CenterFile Exchange에서 Eigenvalues에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by