Проблема с функцией разложения по собственным значениям Джамы - PullRequest
2 голосов
/ 06 апреля 2009

Я получаю неправильный собственный вектор (также проверяется многократным запуском), когда я использую matrix.eig(). Матрица:

1.2290 1.2168 2.8760 2.6370 2.2949 2.6402
1.2168 0.9476 2.5179 2.1737 1.9795 2.2828
2.8760 2.5179 8.8114 8.6530 7.3910 8.1058
2.6370 2.1737 8.6530 7.6366 6.9503 7.6743
2.2949 1.9795 7.3910 6.9503 6.2722 7.3441 
2.6402 2.2828 8.1058 7.6743 7.3441 7.6870

Функция возвращает собственные векторы:

-0.1698  0.6764  0.1442 -0.6929 -0.1069  0.0365
-0.1460  0.6478  0.1926  0.6898  0.0483 -0.2094
-0.5239  0.0780 -0.5236  0.1621 -0.2244  0.6072
-0.4906 -0.0758 -0.4573 -0.1279  0.2842 -0.6688
-0.4428 -0.2770  0.4307  0.0226 -0.6959 -0.2383
-0.4884 -0.1852  0.5228 -0.0312  0.6089  0.2865

Matlab дает следующий собственный вектор для того же входа:

0.1698 -0.6762 -0.1439  0.6931  0.1069  0.0365
0.1460 -0.6481 -0.1926 -0.6895 -0.0483 -0.2094
0.5237 -0.0780  0.5233 -0.1622  0.2238  0.6077
0.4907  0.0758  0.4577  0.1278 -0.2840 -0.6686
0.4425  0.2766 -0.4298 -0.0227  0.6968 -0.2384
0.4888  0.1854 -0.5236  0.0313 -0.6082  0.2857

Собственные значения для matlab и jama совпадают, но собственные векторы, первые 5 столбцов поменялись местами в знаке, и только последний столбец является точным.

Есть ли какие-либо проблемы с типом ввода, который Jama.Matrix.EigenvalueDecomposition.eig() принимает или любую другую проблему с тем же? Пожалуйста, скажите мне, как я могу исправить ошибку. Заранее спасибо.

1 Ответ

9 голосов
/ 06 апреля 2009

Здесь нет ошибки, оба результата верны - как и любое другое скалярное время собственных векторов.

Существует бесконечное число собственных векторов, которые работают - это просто соглашение, согласно которому большинство программ сообщают о векторах, длина которых равна единице. То, что Jama сообщает о собственных векторах, равных -1, в сравнении с значениями Matlab, вероятно, является просто артефактом алгоритма, который они использовали.

...