Apache Commons Math: собственное разложение трехдиагональной матрицы дает неверный результат

Я пытаюсь найти диагональную матрицу D собственных значений и матрицу V, столбцы которой являются соответствующими правыми собственными векторами (где AV = VD) трехдиагональной матрицы J. Я пытаюсь реализовать существующий код MATLAB в java, однако результат, который я получаю в java, отличается от результата в MATLAB (результат MATLAB является правильным результатом). Я создал папку на гугл диске с матрицами из MATALB и java, чтобы вы могли увидеть различия.

Переменные

Фрагмент кода Java:

    RealMatrix J2 = new Array2DRowRealMatrix(j);
    EigenDecomposition eig = new EigenDecomposition(J2);
    RealMatrix V = eig.getV();
    RealMatrix D = eig.getD();

Документация по Apache

Код MATLAB:

[V,D]=eig(J);

Документация по MATLAB

Вот матрицы для каждой переменной:

Переменная J:

J

Переменная V:

Ожидал:

Ожидается V

Фактически: V Фактический

Переменная D:

Ожидал:

D Ожидается

Фактически: D Фактическое


person Bob Joe    schedule 27.08.2016    source источник
comment
Пожалуйста, постарайтесь указать всю необходимую информацию в самом вопросе. В частности, матрица J и ожидаемый результат.   -  person assylias    schedule 27.08.2016


Ответы (1)


В этом случае нельзя сказать, что один результат правильный, а другой неправильный, поскольку результаты Apache Commons Math и MATLAB фактически эквивалентны. Имейте в виду, что:

  1. В обоих случаях вы можете распечатать результаты с определенной точностью. Если вы усекете 0.5045259791 до 5 десятичных цифр, вы получите 0.50452. Тот же результат.
  2. Вы можете умножить собственный вектор на любой скаляр, включая -1, и результатом также будет собственный вектор. Это связано с тем, что множество собственных векторов представляет собой линейное подпространство и замкнуто относительно скалярного умножения читать в Википедии. Обратите внимание, что первый фактический собственный вектор — это последний ожидаемый, умноженный на -1.
  3. Различные реализации собственного разложения используют разные соглашения для упорядочения собственных значений в результате. Фактический D, кажется, имеет обратный порядок, чем ожидаемый.
  4. машинный эпсилон, т. е. верхняя граница относительной ошибки из-за округления в арифметике с плавающей запятой для числа двойной точности с плавающей запятой 2.22e-16. Вы можете увидеть, казалось бы, большие различия между фактическими и ожидаемыми результатами для чисел, близких к машинному эпсилону. Этого следует ожидать для двух разных реализаций собственного разложения.
person Manos Nikolaidis    schedule 08.01.2017