Вращение плоскости Якоби для матрицы A

Как выполнить вращение Якоби (методы Якоби) для данной матрицы J(p,q,theta)

Существует вращение (c = cos (theta) и s = sin (theta))

[c  s
 -s c]

Например, как мы можем оценить вращение для следующей матрицы

A = [-17.7147 -38.4117  30.6475
 -51.3024  17.3859 -10.0354
 -19.3323 -38.8931  30.3686
 -51.2891  18.9043 -11.1523
 -21.42 -39.2796  29.9065
 -51.1701  20.7146 -12.4891
 -24.2543 -39.5276  29.3515
 -51.0782  22.9095 -14.1458]

Используя C ++ Eigen libaray, результат будет следующим: http://eigen.tuxfamily.org/dox -3.2 / classEigenJ(p,q,theta)1JacobiRotation.html

 Result = [ 110.564    -7.77137   -0.308057
        0      87.445    -64.7691
        0           0     1.86159
        0           0           0
        0           0           0
        0           0           0
        0           0           0
        0           0           0]

Использование встроенной функции matlab qr ([~,R]=qr(A)) дает мне следующее:

R = [  110.5645   -7.7714   -0.3081
     0  -87.4451         64.7691
     0         0        -1.8616
     0         0         0
     0         0         0
     0         0         0
     0         0         0
     0         0         0]    

Как видно, результат первой строки одинаков в C ++ и Matlab. тогда как знаки второго и третьего ряда не совпадают. Какое правильное решение или как его можно реализовать в Matlab? Спасибо!!


person ravindraji4    schedule 24.08.2020    source источник


Ответы (1)


Как правило, собственные векторы определяются только с точностью до знака, и здесь вы можете видеть, что существует согласие до знака 2-й и 3-й строки.

Причина в том, что умножение любого собственного вектора на -1 не меняет его статуса как собственного вектора. Вы можете попробовать использовать eigenshuffle из обмена файлами, если это вас беспокоит.

person bla    schedule 24.08.2020
comment
Привет спасибо!! Если мы повернем матрицу, равную собственным значениям, см. Следующую [ссылку] (cs.utexas.edu/users/flame/laff/alaff/). Я могу определить поворот, но только первые значения совпадают с выводом C ++. Остальные расчетные значения всегда разные. - person ravindraji4; 26.08.2020
comment
здесь есть вопрос? ты понял мой ответ? - person bla; 27.08.2020