Проблема с функцией разложения Jama по собственным значениям
-
23-08-2019 - |
Вопрос
Я получаю неправильный собственный вектор (также проверяется путем многократного запуска, чтобы быть уверенным), когда я использую 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()
принимает или какая-либо другая проблема с тем же самым?Пожалуйста, скажите мне, как я могу исправить ошибку.Заранее благодарю.
Решение
Здесь нет ошибки, оба результата верны - как и любой другой скаляр, умноженный на собственные векторы.
Существует бесконечное количество собственных векторов, которые работают - это просто соглашение, согласно которому большинство программ сообщают о векторах, длина которых равна единице.То, что Jama сообщает о собственных векторах, равных в -1 раз больше, чем в Matlab, вероятно, является просто артефактом используемого ими алгоритма.