numpy.linalg.eig
-
numpy.linalg.eig(a)[source] -
Вычислить собственные значения и собственные векторы квадратной матрицы.
- Parameters
-
-
a(…, M, M) array -
Матрицы, для которых будут вычислены собственные значения и собственные векторы
-
- Returns
-
-
w(…, M) array -
Собственные значения, каждое повторяется в соответствии с его кратностью. Собственные значения не обязательно упорядочены. Результирующий массив будет комплексного типа, если только мнимая часть не равна нулю, в этом случае он будет преобразован в вещественный тип. Если
aвещественная, то полученные собственные значения будут вещественными (0 мнимая часть) или появятся в сопряжённых парах -
v(…, M, M) array -
Нормализованные (единичной «длины») собственные векторы, такие, что столбец
v[:,i]является собственным вектором, соответствующим собственному значениюw[i].
-
- Raises
-
- LinAlgError
-
Если вычисление собственных значений не сходится.
См. также
-
eigvals -
собственные значения несимметричной матрицы.
-
eigh -
собственные значения и собственные векторы вещественной симметричной или комплексной эрмитовой (сопряжённо-симметричной) матрицы.
-
eigvalsh -
собственные значения вещественной симметричной или комплексной эрмитовой (сопряжённо-симметричной) матрицы.
-
scipy.linalg.eig -
Аналогичная функция в SciPy, которая также решает обобщённую задачу нахождения собственных значений.
-
scipy.linalg.schur -
Лучший выбор для унитарных и других неэрмитовых нормальных матриц.
Примечания
Добавлена в версии 1.8.0.
Применяются правила трансляции, см. документацию по
numpy.linalgдля получения подробностей.Эта реализация использует LAPACK-рутины, которые вычисляют собственные значения и собственные векторы общих квадратных матриц.
Число
wявляется собственным значением матрицыa, если существует векторv, такой, чтоa @ v = w * v. Таким образом, массивыa,w, иvудовлетворяют уравнениямa @ v[:,i] = w[i] * v[:,i]для.
Массив
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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.linalg.eig.html