Spec-Zone.ru › NumPy 2.0

numpy.linalg.eig

linalg.eig(a)[source]

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

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

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

Возвращаемые значения:
Именованная кортеж со следующими атрибутами:
собственные значения(…, M) массив

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

собственные векторы(…, M, M) массив

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

Исключения:
LinAlgError

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

См. также

eigvals

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

eigh

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

eigvalsh

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

scipy.linalg.eig

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

scipy.linalg.schur

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

Примечания

Введено в версии 1.8.0.

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

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

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

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

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

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

Ссылки

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

Примеры

>>> from numpy import linalg as LA

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

>>> eigenvalues, eigenvectors = LA.eig(np.diag((1, 2, 3)))
>>> eigenvalues
array([1., 2., 3.])
>>> eigenvectors
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

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

>>> eigenvalues, eigenvectors = LA.eig(np.array([[1, -1], [1, 1]]))
>>> eigenvalues
array([1.+1.j, 1.-1.j])
>>> eigenvectors
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]])
>>> eigenvalues, eigenvectors = LA.eig(a)
>>> eigenvalues
array([2.+0.j, 0.+0.j])
>>> eigenvectors
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. eigenvalues are 1 +/- 1e-9
>>> eigenvalues, eigenvectors = LA.eig(a)
>>> eigenvalues
array([1., 1.])
>>> eigenvectors
array([[1., 0.],
       [0., 1.]])

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

Spec-Zone.ru

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