Spec-Zone.ru › NumPy 1.19

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] для i \in \{0,...,M-1\}.

Массив 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

Spec-Zone.ru

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