Nuestro team redactor ha pasado mucho tiempo investigando respuestas a tus dudas, te compartimos la soluciones así que deseamos que resulte de mucha ayuda.
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 propiow[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 dea
si existe un vectorv
tal quea @ v = w * v
. Por lo tanto, las matricesa
,w
, yv
satisfacer las ecuacionesa @ v[:,i] = w[i] * v[:,i]
por .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 ya
puede ser diagonalizado por una transformación de similitud usandov
, es decir,inv(v) @ a @ v
es diagonal.Para matrices normales no hermitianas, la función SciPy
scipy.linalg.schur
v
se garantiza que sea unitario, lo que no es el caso cuando se utilizaeig
. 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 dea
. Un vectory
satisfactorioy.T @ a = z * y.T
por algún númeroz
se llama un izquierda vector propio dea
y, 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.]])
Si guardas algún enigma o disposición de enriquecer nuestro ensayo te recordamos añadir una reseña y con gusto lo analizaremos.