Разница в собственных значениях в MatLab и numpy для эрмитовых матриц

Я делаю некоторую работу с эрмитовыми матрицами. Первоначальная работа была сделана в Matlab, но сейчас я продолжаю работу в Python. Я использую numpy в python, но я получаю расхождения между собственными значениями, указанными в python, и в MatLab, может ли кто-нибудь сказать мне, что здесь происходит не так?

У меня есть больше примеров этой проблемы, но быстрый пример:

import numpy as np
mat = [[-1,1,-1],[1,-1,1],[-1,1,1]]
w,v = np.linalg.eig(mat)

дает

w = array([ -2.56155281e+00,   2.01878445e-16,   1.56155281e+00])

В Матлабе -

mat = [-1,1,-1;1,-1,1;-1,1,1]
eig(mat)

ans =

   -2.5616
         0
    1.5616

Является ли этот MatLab неточным или ошибками Python? У меня есть много других, которые согласны со значениями, разногласия являются исключением в моем полном наборе данных. Любая помощь в объяснении этого вопроса была бы отличной.

Спасибо


person thefalconpen    schedule 05.02.2016    source источник
comment
Выход из Matalb с format long: -2.561552812808829, 1.561552812808831   -  person Anton Protopopov    schedule 05.02.2016
comment
Если ваши матрицы эрмитовы, используйте eigh вместо eig.   -  person percusse    schedule 05.02.2016
comment
Возможный дубликат Как хранить более 4 знаков после запятой в массиве в MATLAB   -  person horchler    schedule 05.02.2016


Ответы (1)


Matlab округляет значения для отображения. Попробуйте следующее, чтобы получить те же результаты, что и в python.

format long
mat = [-1,1,-1;1,-1,1;-1,1,1]
eig(mat)
person Till Hoffmann    schedule 05.02.2016