2015-04-17 5 views
1

Я читал около Singular Value Decomposition. Цитирую Википедию:расчет svd с использованием собственных векторов матрицы * (матрица ')

The left-singular vectors of M are eigenvectors of MM∗. 
The right-singular vectors of M are eigenvectors of M∗M. 
The non-zero singular values of M (found on the diagonal entries of Σ) 
are the square roots of the non-zero eigenvalues of both M∗M and MM∗ 

Я написал эту октаву код (консольный вывод показан здесь):

a является матрица, СВД вычисляется.

octave:1> a = [1,3;3,1] 
a = 

    1 3 
    3 1 

octave:3> [U,S,V] = svd(a) 
U = 

    -0.70711 -0.70711 
    -0.70711 0.70711 

S = 

Diagonal Matrix 

    4 0 
    0 2 

V = 

    -0.70711 0.70711 
    -0.70711 -0.70711 

Проверьте СВД действительно работает ..

octave:4> U*S*V 
ans = 

    3.00000 -1.00000 
    1.00000 -3.00000 

octave:5> U*S*V' 
ans = 

    1.00000 3.00000 
    3.00000 1.00000 

Теперь попробуйте первый принцип (википедия) стиль:

octave:6> b = a*a' 
b = 

    10 6 
    6 10 

octave:7> c = a'*a 
c = 

    10 6 
    6 10 

octave:8> [E1,L1] = eig(b) 
E1 = 

    -0.70711 0.70711 
    0.70711 0.70711 

L1 = 

Diagonal Matrix 

    4 0 
    0 16 

octave:9> [E2,L2] = eig(c) 
E2 = 

    -0.70711 0.70711 
    0.70711 0.70711 

L2 = 

Diagonal Matrix 

    4 0 
    0 16 

Я могу видеть, что собственные значения из b и c квадраты сингулярных значений a. Это здорово. Но left-singular-vectors и right-singular-vectors идут не так ... знак проблемы.

Какой дополнительный шаг необходим для получения правильных значений?

ответ

0

Вы уже имеете правильные значения.

Собственные векторы определены с точностью до мультипликативной константы. Это видно из their definition. Так что в вашем случае [-0.70711; -0.70711] и [0.70711; 0.70711] эквивалентны.

И в обоих случаях [-1; 1] собственный вектор соответствует SQRT (4) = 2 собственных значений, в то время как [1; 1] собственный вектор соответствует SQRT (16) = 4 собственное значение.

 Смежные вопросы

  • Нет связанных вопросов^_^