Собственный вектор матрицы python

numpy.linalg.eig#

Compute the eigenvalues and right eigenvectors of a square array.

Parameters : a (…, M, M) array

Matrices for which the eigenvalues and right eigenvectors will be computed

Returns : A namedtuple with the following attributes: eigenvalues (…, M) array

The eigenvalues, each repeated according to its multiplicity. The eigenvalues are not necessarily ordered. The resulting array will be of complex type, unless the imaginary part is zero in which case it will be cast to a real type. When a is real the resulting eigenvalues will be real (0 imaginary part) or occur in conjugate pairs

eigenvectors (…, M, M) array

The normalized (unit “length”) eigenvectors, such that the column eigenvectors[:,i] is the eigenvector corresponding to the eigenvalue eigenvalues[i] .

If the eigenvalue computation does not converge.

eigenvalues of a non-symmetric array.

eigenvalues and eigenvectors of a real symmetric or complex Hermitian (conjugate symmetric) array.

eigenvalues of a real symmetric or complex Hermitian (conjugate symmetric) array.

Similar function in SciPy that also solves the generalized eigenvalue problem.

Best choice for unitary and other non-Hermitian normal matrices.

Broadcasting rules apply, see the numpy.linalg documentation for details.

This is implemented using the _geev LAPACK routines which compute the eigenvalues and eigenvectors of general square arrays.

The number w is an eigenvalue of a if there exists a vector v such that a @ v = w * v . Thus, the arrays a, eigenvalues, and eigenvectors satisfy the equations a @ eigenvectors[:,i] = eigenvalues[i] * eigenvalues[:,i] for \(i \in \\) .

The array eigenvectors may not be of maximum rank, that is, some of the columns may be linearly dependent, although round-off error may obscure that fact. If the eigenvalues are all different, then theoretically the eigenvectors are linearly independent and a can be diagonalized by a similarity transformation using eigenvectors, i.e, inv(eigenvectors) @ a @ eigenvectors is diagonal.

For non-Hermitian normal matrices the SciPy function scipy.linalg.schur is preferred because the matrix eigenvectors is guaranteed to be unitary, which is not the case when using eig . The Schur factorization produces an upper triangular matrix rather than a diagonal matrix, but for normal matrices only the diagonal of the upper triangular matrix is needed, the rest is roundoff error.

Finally, it is emphasized that eigenvectors consists of the right (as in right-hand side) eigenvectors of a. A vector y satisfying y.T @ a = z * y.T for some number z is called a left eigenvector of a, and, in general, the left and right eigenvectors of a matrix are not necessarily the (perhaps conjugate) transposes of each other.

G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando, FL, Academic Press, Inc., 1980, Various pp.

>>> from numpy import linalg as LA 

(Almost) trivial example with real eigenvalues and eigenvectors.

>>> 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.]]) 

Real matrix possessing complex eigenvalues and eigenvectors; note that the eigenvalues are complex conjugates of each other.

>>> 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]]) 

Complex-valued matrix with real eigenvalues (but complex-valued eigenvectors); note that a.conj().T == a , i.e., a is Hermitian.

>>> 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]]) 

Be careful about round-off error!

>>> 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.]]) 

Источник

numpy.linalg.eigh#

Return the eigenvalues and eigenvectors of a complex Hermitian (conjugate symmetric) or a real symmetric matrix.

Returns two objects, a 1-D array containing the eigenvalues of a, and a 2-D square array or matrix (depending on the input type) of the corresponding eigenvectors (in columns).

Parameters : a (…, M, M) array

Hermitian or real symmetric matrices whose eigenvalues and eigenvectors are to be computed.

UPLO , optional

Specifies whether the calculation is done with the lower triangular part of a (‘L’, default) or the upper triangular part (‘U’). Irrespective of this value only the real parts of the diagonal will be considered in the computation to preserve the notion of a Hermitian matrix. It therefore follows that the imaginary part of the diagonal will always be treated as zero.

Returns : A namedtuple with the following attributes: eigenvalues (…, M) ndarray

The eigenvalues in ascending order, each repeated according to its multiplicity.

eigenvectors

The column eigenvectors[:, i] is the normalized eigenvector corresponding to the eigenvalue eigenvalues[i] . Will return a matrix object if a is a matrix object.

If the eigenvalue computation does not converge.

eigenvalues of real symmetric or complex Hermitian (conjugate symmetric) arrays.

eigenvalues and right eigenvectors for non-symmetric arrays.

eigenvalues of non-symmetric arrays.

Similar function in SciPy (but also solves the generalized eigenvalue problem).

Broadcasting rules apply, see the numpy.linalg documentation for details.

The eigenvalues/eigenvectors are computed using LAPACK routines _syevd , _heevd .

The eigenvalues of real symmetric or complex Hermitian matrices are always real. [1] The array eigenvalues of (column) eigenvectors is unitary and a, eigenvalues, and eigenvectors satisfy the equations dot(a, eigenvectors[:, i]) = eigenvalues[i] * eigenvectors[:, i] .

G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando, FL, Academic Press, Inc., 1980, pg. 222.

>>> from numpy import linalg as LA >>> a = np.array([[1, -2j], [2j, 5]]) >>> a array([[ 1.+0.j, -0.-2.j], [ 0.+2.j, 5.+0.j]]) >>> eigenvalues, eigenvectors = LA.eigh(a) >>> eigenvalues array([0.17157288, 5.82842712]) >>> eigenvectors array([[-0.92387953+0.j , -0.38268343+0.j ], # may vary [ 0. +0.38268343j, 0. -0.92387953j]]) 
>>> np.dot(a, eigenvectors[:, 0]) - eigenvalues[0] * eigenvectors[:, 0] # verify 1st eigenval/vec pair array([5.55111512e-17+0.0000000e+00j, 0.00000000e+00+1.2490009e-16j]) >>> np.dot(a, eigenvectors[:, 1]) - eigenvalues[1] * eigenvectors[:, 1] # verify 2nd eigenval/vec pair array([0.+0.j, 0.+0.j]) 
>>> A = np.matrix(a) # what happens if input is a matrix object >>> A matrix([[ 1.+0.j, -0.-2.j], [ 0.+2.j, 5.+0.j]]) >>> eigenvalues, eigenvectors = LA.eigh(A) >>> eigenvalues array([0.17157288, 5.82842712]) >>> eigenvectors matrix([[-0.92387953+0.j , -0.38268343+0.j ], # may vary [ 0. +0.38268343j, 0. -0.92387953j]]) 
>>> # demonstrate the treatment of the imaginary part of the diagonal >>> a = np.array([[5+2j, 9-2j], [0+2j, 2-1j]]) >>> a array([[5.+2.j, 9.-2.j], [0.+2.j, 2.-1.j]]) >>> # with UPLO='L' this is numerically equivalent to using LA.eig() with: >>> b = np.array([[5.+0.j, 0.-2.j], [0.+2.j, 2.-0.j]]) >>> b array([[5.+0.j, 0.-2.j], [0.+2.j, 2.+0.j]]) >>> wa, va = LA.eigh(a) >>> wb, vb = LA.eig(b) >>> wa; wb array([1., 6.]) array([6.+0.j, 1.+0.j]) >>> va; vb array([[-0.4472136 +0.j , -0.89442719+0.j ], # may vary [ 0. +0.89442719j, 0. -0.4472136j ]]) array([[ 0.89442719+0.j , -0. +0.4472136j], [-0. +0.4472136j, 0.89442719+0.j ]]) 

Источник

numpy.linalg.eig

numpy

Вычислите собственные значения и правые собственные векторы квадратного массива.

Parameters массив (…, M, M)

Матрицы,для которых будут вычисляться собственные значения и правильные собственные векторы

Returns w (…, M) массив

Собственные значения, каждое из которых повторяется согласно своей кратности. Собственные значения не обязательно упорядочены. Результирующий массив будет сложного типа, если только мнимая часть не равна нулю, и в этом случае он будет приведен к реальному типу. Когда a является действительным, результирующие собственные значения будут действительными (0 мнимая часть) или возникать в сопряженных парах

v (…, М, М) массив

Нормализованные (единичная «длина») собственные векторы, такие, что столбец v[:,i] является собственным вектором, соответствующим собственному значению w[i] .

Если вычисление собственного значения не сходится.

собственные значения несимметричного массива.

собственные значения и собственные векторы реального симметричного или сложного гермитского (сопряженного симметричного)массива.

собственные значения реального симметричного или сложного гермитского (сопряженного симметричного)массива.

Аналогичная функция в SciPy,которая также решает обобщенную проблему собственных значений.

Лучший выбор для унитарных и других негермитичных нормальных матриц.

Notes

Применяются правила трансляции, подробности см. numpy.linalg документации numpy.linalg .

Это реализуется с помощью подпрограмм _geev LAPACK, которые вычисляют собственные значения и собственные векторы квадратных массивов общего вида.

Число w является собственным значением a , если существует вектор v такой, что a @ v = w * v . Таким образом, массивы a , w и v удовлетворяют уравнениям a @ v[:,i] = w[i] * v[:,i] для \ (i \ in \ \).

Массив v собственных векторов может не иметь максимального ранга, то есть некоторые столбцы могут быть линейно зависимыми, хотя ошибка округления может скрыть этот факт. Если все собственные значения различны, то теоретически собственные векторы линейно независимы и a может быть диагонализовано преобразованием подобия с использованием v , т. inv(v) @ a @ v диагонален.

Для scipy.linalg.schur нормальных матриц функция SciPy scipy.linalg.schur предпочтительна, потому что матрица v гарантированно унитарна, чего не происходит при использовании eig . Факторизация Шура дает верхнюю треугольную матрицу, а не диагональную матрицу, но для нормальных матриц требуется только диагональ верхней треугольной матрицы, остальное — ошибка округления.

Наконец, подчеркнем, что v состоит из правых (как и в правой части) собственных векторов вектора a . Вектор y , удовлетворяющий y.T @ a = z * y.T для некоторого числа z , называется левым собственным вектором a , и, как правило, левый и правый собственные векторы матрицы не обязательно являются (возможно, сопряженными) транспонами друг друга.

References

Г. Стрэнг, Линейная алгебра и ее приложения , 2-е изд., Орландо, Флорида, Academic Press, Inc., 1980, стр.

Examples

>>> from numpy import linalg as LA 

(Почти) тривиальный пример с действительными e-значениями и e-векторами.

>>> 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]])

Комплексная матрица с действительными e-значениями (но комплексными e-векторами); обратите внимание, что 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.]])
NumPy 1.23

Возвращает собственные значения и собственные векторы комплексной эрмитовой (сопряженно-симметричной)вещественной матрицы.

Источник

Читайте также:  Java найти остаток от деления
Оцените статью