numpy.linalg.eig
-
numpy.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 - собственные значения вещественной симметричной или комплексной эрмитовой (сопряжённо-симметричной) матрицы.
Примечания
Введено в версии 1.8.0.
Применяются правила векторизации, см. документацию
numpy.linalgдля получения подробностей.Это реализовано с помощью подпрограмм LAPACK _geev, которые вычисляют собственные значения и собственные векторы квадратных матриц общего вида.
Число
wявляется собственным значениемa, если существует векторvтакой, чтоdot(a,v) = w * v. Таким образом, массивыa,w, иvудовлетворяют уравнениямdot(a[:,:], v[:,i]) = w[i] * v[:,i]для.
Массив
vсобственных векторов может не иметь максимального ранга, то есть некоторые столбцы могут быть линейно зависимы, хотя погрешность округления может замаскировать этот факт. Если собственные значения все разные, то теоретически собственные векторы линейно независимы. Аналогично, (комплекснозначная) матрица собственных векторовvявляется унитарной, если матрицаaявляется нормальной, т.е. еслиdot(a, a.H) = dot(a.H, a), гдеa.Hобозначает сопряжённо-транспонированную матрицуa.Наконец, следует подчеркнуть, что
vсостоит из правых (как в правой части) собственных векторовa. Векторyудовлетворяющийdot(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.00000000-0.70710678j, 0.00000000+0.70710678j]])Комплекснозначная матрица с вещественными собственными значениями (но комплекснозначными собственными векторами); обратите внимание, что a.conj().T = a, т.е. a — эрмитова матрица.
>>> a = np.array([[1, 1j], [-1j, 1]]) >>> w, v = LA.eig(a) >>> w; v array([ 2.00000000e+00+0.j, 5.98651912e-36+0.j]) # i.e., {2, 0} array([[ 0.00000000+0.70710678j, 0.70710678+0.j ], [ 0.70710678+0.j , 0.00000000+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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.linalg.eig.html