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