Spec-Zone.ru › NumPy 1.21

numpy.linalg.eig

linalg.eig(a)[source]

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

Параметры
a(…, M, M) массив

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

Возвращает
w(…, M) массив

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

v(…, M, M) массив

Нормализованные (единичной «длины») собственные векторы, такие что столбец 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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.linalg.eig.html

Spec-Zone.ru

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