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для получения подробностей.Это реализовано с использованием
_geevLAPACK-функций, которые вычисляют собственные значения и собственные векторы общих квадратных массивов.Число
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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.linalg.eig.html