linalg.eig(a)[source]

Calcule los valores propios y los vectores propios rectos de una matriz cuadrada.

Parámetros
a(…, M, M) array

Matrices para las que se calcularán los valores propios y los vectores propios rectos

Devoluciones
w(…, M) array

Los valores propios, cada uno repetido según su multiplicidad. Los valores propios no están necesariamente ordenados. La matriz resultante será de tipo complejo, a menos que la parte imaginaria sea cero, en cuyo caso se convertirá en un tipo real. Cuando a es real los valores propios resultantes serán reales (0 parte imaginaria) u ocurrirán en pares conjugados

v(…, M, M) array

Los vectores propios normalizados (unidad de “longitud”), de modo que la columna v[:,i] es el vector propio correspondiente al valor propio w[i].

Eleva
LinAlgError

Si el cálculo del valor propio no converge.

Ver también

eigvals

valores propios de una matriz no simétrica.

eigh

valores propios y vectores propios de una matriz hermitiana (simétrica conjugada) simétrica o compleja real.

eigvalsh

valores propios de una matriz hermitiana (simétrica conjugada) simétrica o compleja real.

scipy.linalg.eig

Función similar en SciPy que también resuelve el problema de valores propios generalizados.

scipy.linalg.schur

La mejor opción para matrices normales unitarias y otras no hermitianas.

Notas

Nuevo en la versión 1.8.0.

Se aplican las reglas de transmisión, consulte la numpy.linalg documentación para más detalles.

Esto se implementa utilizando el _geev Rutinas LAPACK que calculan los valores propios y los vectores propios de matrices cuadradas generales.

El número w es un valor propio de a si existe un vector v tal que a @ v = w * v. Por lo tanto, las matrices a, w, y v satisfacer las ecuaciones a @ v[:,i] = w[i] * v[:,i] por i  in  0, ..., M-1 .

La matriz v de los autovectores pueden no ser de rango máximo, es decir, algunas de las columnas pueden ser linealmente dependientes, aunque el error de redondeo puede oscurecer ese hecho. Si los autovalores son todos diferentes, entonces teóricamente los autovectores son linealmente independientes y a puede ser diagonalizado por una transformación de similitud usando v, es decir, inv(v) @ a @ v es diagonal.

Para matrices normales no hermitianas, la función SciPy scipy.linalg.schur

se prefiere porque la matriz v se garantiza que sea unitario, lo que no es el caso cuando se utiliza eig. La factorización de Schur produce una matriz triangular superior en lugar de una matriz diagonal, pero para las matrices normales solo se necesita la diagonal de la matriz triangular superior, el resto es error de redondeo.

Finalmente, se enfatiza que v consiste en el Derecha (como en el lado derecho) vectores propios de a. Un vector y satisfactorio y.T @ a = z * y.T por algún número z se llama un izquierda vector propio de ay, en general, los vectores propios izquierdo y derecho de una matriz no son necesariamente las transposiciones (quizás conjugadas) entre sí.

Referencias

G. Strang, Álgebra lineal y sus aplicaciones, 2ª Ed., Orlando, FL, Academic Press, Inc., 1980, Varias págs.

Ejemplos de

>>>from numpy import linalg as LA

Ejemplo (casi) trivial con valores e y vectores e reales.

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

Matriz real que posee valores e y vectores e complejos; tenga en cuenta que los valores e son conjugados complejos entre sí.

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

Matriz de valores complejos con valores e reales (pero vectores e de valores complejos); tenga en cuenta que a.conj().T == a, es decir, a es hermitiano.

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

¡Tenga cuidado con el error de redondeo!

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