Spec-Zone.ru › NumPy 1.20

numpy.linalg.eig

linalg.eig(a) [source]

Вычисление собственных значений и собственных векторов квадратного массива.

Параметры
a(…, M, M) array

Матрицы, для которых будут вычислены собственные значения и собственные векторы

Возвращает
w(…, M) array

Собственные значения, каждое повторяется в соответствии с его кратностью. Собственные значения не обязательно упорядочены. Результирующий массив будет комплексного типа, если мнимая часть не равна нулю, в противном случае он будет преобразован в вещественный тип. Когда a вещественное, полученные собственные значения будут вещественными (0 мнимая часть) или встречаться в сопряжённых парах

v(…, M, M) array

Нормализованные (единичной «длины») собственные векторы, такие что столбец v[:,i] является собственным вектором, соответствующим собственному значению w[i].

Возбуждает
LinAlgError

Если вычисление собственных значений не сойдётся.

См. также

eigvals

собственные значения несимметричного массива.

eigh

собственные значения и собственные векторы вещественного симметричного или комплексного эрмитова (сопряженно-симметричного) массива.

eigvalsh

собственные значения вещественного симметричного или комплексного эрмитова (сопряженно-симметричного) массива.

scipy.linalg.eig

Аналогичная функция в SciPy, которая также решает обобщённую задачу нахождения собственных значений.

scipy.linalg.schur

Лучший выбор для унитарных и других неэрмитовых нормальных матриц.

Примечания

Новое в версии 1.8.0.

Применяются правила вещания, см. документацию numpy.linalg для получения подробностей.

Это реализовано с использованием _geev LAPACK-функций, которые вычисляют собственные значения и собственные векторы общих квадратных массивов.

Число w является собственным значением a, если существует вектор v, такой что a @ v = w * v. Таким образом, массивы a, w, и v удовлетворяют уравнениям a @ v[:,i] = w[i] * v[:,i] для i \in \{0,...,M-1\}.

Массив v собственных векторов может не иметь максимального ранга, то есть некоторые столбцы могут быть линейно зависимыми, хотя погрешность округления может это скрыть. Если собственные значения все разные, то теоретически собственные векторы линейно независимы и a может быть диагонализована с помощью преобразования подобия, используя v, то есть inv(v) @ a @ v является диагональной.

Для неэрмитовых нормальных матриц функция SciPy scipy.linalg.schur предпочтительнее, потому что матрица v гарантированно является унитарной, что не является случаем при использовании eig. Разложение Шура даёт верхнюю треугольную матрицу вместо диагональной матрицы, но для нормальных матриц требуется только диагональ верхней треугольной матрицы, остальное — ошибка округления.

Наконец, следует подчеркнуть, что v состоит из правых (как в правой части) собственных векторов a. Вектор y, удовлетворяющий y.T @ a = z * y.T для некоторого числа z называется левым собственным вектором a, и, вообще говоря, левые и правые собственные векторы матрицы не обязательно являются (возможно, сопряженными) транспонированными друг друга.

Ссылки

Г. Странг, Линейная алгебра и её приложения, 2-е изд., Орландо, Флорида, Издательство Academic Press, Inc., 1980, Различные стр.

Примеры

>>> from numpy import linalg as LA

(Практически) тривиальный пример с вещественными собственными значениями и собственными векторами.

>>> w, v = LA.eig(np.diag((1, 2, 3)))
>>> w; v
array([1., 2., 3.])
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

Вещественная матрица с комплексными собственными значениями и собственными векторами; обратите внимание, что собственные значения являются комплексными сопряжёнными друг другу.

>>> w, v = LA.eig(np.array([[1, -1], [1, 1]]))
>>> w; v
array([1.+1.j, 1.-1.j])
array([[0.70710678+0.j        , 0.70710678-0.j        ],
       [0.        -0.70710678j, 0.        +0.70710678j]])

Комплексная матрица с вещественными собственными значениями (но комплексными собственными векторами); обратите внимание, что a.conj().T == a, т.е., a является эрмитовой.

>>> a = np.array([[1, 1j], [-1j, 1]])
>>> w, v = LA.eig(a)
>>> w; v
array([2.+0.j, 0.+0.j])
array([[ 0.        +0.70710678j,  0.70710678+0.j        ], # may vary
       [ 0.70710678+0.j        , -0.        +0.70710678j]])

Будьте внимательны к погрешности округления!

>>> a = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]])
>>> # Theor. e-values are 1 +/- 1e-9
>>> w, v = LA.eig(a)
>>> w; v
array([1., 1.])
array([[1., 0.],
       [0., 1.]])

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.linalg.eig.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API