Я пытаюсь использовать eig_pair, чтобы получить разложение по Eigen для пары общих плотных квадратных матриц A и B одинакового размера, так что A * eigvec = B * eigvec * diagmat (eigval), но результат не соответствует функции ela Matlab , например:
A= [1,2;3,4] B=[2,4;5,8]
в Matlab:
[u,v] = eig(A,B)
результат:
u =
-1.0000 -0.0000
0.5000 -1.0000
v =
1.0000 0
0 0.5000
в броненосце:
eig_pair(v,u,A,B)
результат:
и:
9.9301e-016 -1.0000e+000
1.0000e+000 5.0000e-001
v:
0.5000
1.0000
Мой вопрос: как получить значения u и v, которые соответствуют результатам в Matlab?
Ждем вашего ответа !!!
Собственные векторы не уникальны. Если U является собственным вектором, так это м * U для всех м! = 0. Кроме того, порядок, eig
возвращает собственные векторы в Matlab произвольно. (Я не знаю, в каком порядке Армадилло возвращает собственные векторы.) Вы мог попытайтесь создать канонический порядок для собственных векторов путем сортировки собственных значений, но это проблематично, если у вас есть сложные собственные значения. (Напомним, что реальные матрицы могут иметь сложные собственные значения.)
Таким образом, (-1.0000, 0.5000) (первый столбец U в Matlab) является тем же собственным вектором, что и (-1.0000e + 000, 5.0000e-001) (второй столбец U в броненосце). Так же, (-0,0000, -1,0000) эквивалентно (9.9301e-016, 1.0000e + 000) когда вы масштабируете на -1 и учитываете ошибки с плавающей запятой. Обратите внимание, что возможны ошибки числовой точности, которые могут привести к тому, что значения с плавающей запятой будут сравниваться не одинаково, даже если математически числа являются равны.
Если вы хотите каноническое представление собственных векторов, вы можете изменить их масштаб, чтобы иметь норму 1, а также умножить на -1, если знак первого элемента отрицательный. Конечно, если первый элемент в собственном векторе близок к 0, это опять-таки проблематично, так как значение могло оказаться только с неправильной стороны нуля по численным причинам. Так что если подумать, может быть лучше убедиться, что самый большой элемент (после нормализации), а не первый, является положительным.
Других решений пока нет …