np.linalg eigh и eig Какая разница и что лучше использовать

Вот цитата из рассыли [1]:

eig() is for nonsymmetric matrices and eigh() is for symmetric
(or hermitian matrices).

The former most likely will return complex eigen values. The latter
always returns real eigen values.

eig() is slower and numerically less reliable (it calls LAPACK's DGEEV
and ZGEEV). Even for symmetric matrices it can produce complex
eigen pairs due to numerical round-off.

eigh() can be called with an optional parameter UPLO that tells the
routine which triangle of the matrix it should operate on. That triangle
is destroyed and the other triangle is left untouched.

Piotr

То есть тут сказано, что:

  • eigh() -- служит для работы с эрмитовыми матрицами, всегда возвращает вещественные собственные значения.
  • eig() -- скорее всего вернёт комплексные собственные значения, и она численно менее точна и более медленна, чем eigh(). См. оценку разницы для самосопряжённой матрицы.

Таким образом:
Для эрмитовых матриц следует использовать eigh() это повысит скорость и точность рассчёта.

Источники

vedro-compota's picture

Не ясно как перевести фрагмент из цитаты выше:

....UPLO that tells the
routine which triangle of the matrix it should operate on

Доккументация eigh() есть тут

_____________
матфак вгу и остальная классика =)

eigh() can be called with an optional parameter UPLO that tells the
routine which triangle of the matrix it should operate on. That triangle
is destroyed and the other triangle is left untouched.

eigh() может быть вызвана с необязательным параметром UPLO, который говорит этой процедуре [скорее всего, речь идёт об eigh()], на каком треугольнике матрицы ей следует оперировать. Этот треугольник уничтожается, и другой треугольник остаётся нетронутым.

vedro-compota's picture

да, а что это за треугольник? "половина" под или над диагональю? Её достатчоно для вычисления собственных значений потому что матрица эрмитова?

_____________
матфак вгу и остальная классика =)

Похоже, это то, что под (или над) диагональю и сама диагональ.
Значения на диагонали влияют на собственные значения.