eig
Valores propios y vectores propios
Sintaxis
Descripción
[ también devuelve la matriz completa V,D,W] = eig(A)W cuyas columnas son los vectores propios izquierdos correspondientes, por lo que W'*A = D*W'.
El problema de valores propios consiste en determinar la solución de la ecuación Av = λv, donde A es una matriz de n por n, v es un vector columna de longitud n y λ es un escalar. Los valores de λ que satisfacen la ecuación son los valores propios. Los valores correspondientes de v que satisfacen la ecuación son los vectores propios derechos. Los vectores propios izquierdos, w, satisfacen la ecuación w'A = λw'.
[ también devuelve la matriz completa V,D,W] = eig(A,B)W cuyas columnas son los vectores propios izquierdos correspondientes, por lo que W'*A = D*W'*B.
El problema de valores propios generalizados consiste en determinar la solución de la ecuación Av = λBv, donde A y B son matrices de n por n, v es un vector columna de longitud n y λ es un escalar. Los valores de λ que satisfacen la ecuación son los valores propios generalizados. Los valores correspondientes de v son los vectores propios derechos generalizados. Los vectores propios izquierdos, w, satisfacen la ecuación w'A = λw'B.
[___] = eig(, donde A,balanceOption)balanceOption es "nobalance", desactiva el paso de equilibrado preliminar en el algoritmo. El valor predeterminado de balanceOption es "balance", que permite el equilibrado. La función eig puede devolver cualquiera de los argumentos de salida de las sintaxis anteriores.
[___] = eig(, donde A,B,algorithm)algorithm es "chol", utiliza la factorización de Cholesky de B para calcular los valores propios generalizados. El valor predeterminado de algorithm depende de las propiedades de A y B, pero generalmente es "qz", que utiliza el algoritmo QZ, cuando A o B no son simétricas.
[___] = eig(___, devuelve los valores propios en la forma especificada por outputForm)outputForm utilizando cualquiera de los argumentos de entrada o salida de las sintaxis anteriores. Especifique outputForm como "vector" para devolver los valores propios en un vector columna o como "matrix" para devolverlos en una matriz diagonal.
Ejemplos
Utilice gallery para crear una matriz simétrica definida positiva.
A = gallery("lehmer",4)A = 4×4
1.0000 0.5000 0.3333 0.2500
0.5000 1.0000 0.6667 0.5000
0.3333 0.6667 1.0000 0.7500
0.2500 0.5000 0.7500 1.0000
Calcule los valores propios de A. El resultado es un vector columna.
e = eig(A)
e = 4×1
0.2078
0.4078
0.8482
2.5362
Como alternativa, utilice outputForm para devolver los valores propios en una matriz diagonal.
D = eig(A,"matrix")D = 4×4
0.2078 0 0 0
0 0.4078 0 0
0 0 0.8482 0
0 0 0 2.5362
Utilice gallery para crear una matriz circulante.
A = gallery("circul",3)A = 3×3
1 2 3
3 1 2
2 3 1
Calcule los valores propios y los vectores propios derechos de A.
[V,D] = eig(A)
V = 3×3 complex
-0.5774 + 0.0000i 0.2887 - 0.5000i 0.2887 + 0.5000i
-0.5774 + 0.0000i -0.5774 + 0.0000i -0.5774 + 0.0000i
-0.5774 + 0.0000i 0.2887 + 0.5000i 0.2887 - 0.5000i
D = 3×3 complex
6.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i -1.5000 + 0.8660i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i -1.5000 - 0.8660i
Compruebe que los resultados satisfacen A*V = V*D.
A*V - V*D
ans = 3×3 complex
10-14 ×
-0.2665 + 0.0000i -0.0444 + 0.0222i -0.0444 - 0.0222i
0.0888 + 0.0000i 0.0111 + 0.0777i 0.0111 - 0.0777i
-0.0444 + 0.0000i -0.0111 + 0.0833i -0.0111 - 0.0833i
Lo ideal es que la descomposición de valores propios satisfaga la relación. Dado que eig realiza la descomposición utilizando cálculos de punto flotante, A*V puede, en el mejor de los casos, aproximarse a V*D. En otras palabras, A*V - V*D está cerca, aunque no exactamente, de 0.
De forma predeterminada, eig no siempre devuelve los valores y vectores propios ordenados. Utilice la función sort para poner los valores propios en orden ascendente y reordenar los vectores propios correspondientes.
Calcule los valores y vectores propios de una matriz cuadrada mágica de 5 por 5.
A = magic(5)
A = 5×5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
[V,D] = eig(A)
V = 5×5
-0.4472 0.0976 -0.6330 0.6780 -0.2619
-0.4472 0.3525 0.5895 0.3223 -0.1732
-0.4472 0.5501 -0.3915 -0.5501 0.3915
-0.4472 -0.3223 0.1732 -0.3525 -0.5895
-0.4472 -0.6780 0.2619 -0.0976 0.6330
D = 5×5
65.0000 0 0 0 0
0 -21.2768 0 0 0
0 0 -13.1263 0 0
0 0 0 21.2768 0
0 0 0 0 13.1263
Los valores propios de A están en la diagonal de D. Sin embargo, los valores propios no están ordenados.
Extraiga los valores propios de la diagonal de D utilizando diag(D) y, a continuación, disponga el vector resultante en orden ascendente. La segunda salida de sort devuelve un vector de permutación de índices.
[d,ind] = sort(diag(D))
d = 5×1
-21.2768
-13.1263
13.1263
21.2768
65.0000
ind = 5×1
2
3
5
4
1
Use ind para reordenar los elementos de la diagonal de D. Como los valores propios de D se corresponden con los vectores propios de las columnas de V, también hay que reordenar las columnas de V utilizando los mismos índices.
Ds = D(ind,ind)
Ds = 5×5
-21.2768 0 0 0 0
0 -13.1263 0 0 0
0 0 13.1263 0 0
0 0 0 21.2768 0
0 0 0 0 65.0000
Vs = V(:,ind)
Vs = 5×5
0.0976 -0.6330 -0.2619 0.6780 -0.4472
0.3525 0.5895 -0.1732 0.3223 -0.4472
0.5501 -0.3915 0.3915 -0.5501 -0.4472
-0.3223 0.1732 -0.5895 -0.3525 -0.4472
-0.6780 0.2619 0.6330 -0.0976 -0.4472
Tanto (V,D) como (Vs,Ds) permiten obtener la descomposición en valores propios de A. Los resultados de A*V-V*D y A*Vs-Vs*Ds coinciden, hasta el error de redondeo.
e1 = norm(A*V-V*D); e2 = norm(A*Vs-Vs*Ds); e = abs(e1 - e2)
e = 0
Cree una matriz de 3 por 3.
A = [1 7 3; 2 9 12; 5 22 7];
Calcule los vectores propios derechos, V, los valores propios, D, y los vectores propios izquierdos, W.
[V,D,W] = eig(A)
V = 3×3
-0.2610 -0.9734 0.1891
-0.5870 0.2281 -0.5816
-0.7663 -0.0198 0.7912
D = 3×3
25.5548 0 0
0 -0.5789 0
0 0 -7.9759
W = 3×3
-0.1791 -0.9587 -0.1881
-0.8127 0.0649 -0.7477
-0.5545 0.2768 0.6368
Compruebe que los resultados satisfacen W'*A = D*W'.
W'*A - D*W'
ans = 3×3
10-13 ×
-0.0266 -0.2132 -0.1243
0.0056 -0.0286 -0.0072
-0.0022 0 -0.0178
Lo ideal es que la descomposición de valores propios satisfaga la relación. Dado que eig realiza la descomposición utilizando cálculos de punto flotante, W'*A puede, en el mejor de los casos, aproximarse a D*W'. En otras palabras, W'*A - D*W' está cerca, aunque no exactamente, de 0.
Cree una matriz de 3 por 3.
A = [3 1 0; 0 3 1; 0 0 3];
Calcule los valores propios y los vectores propios derechos de A.
[V,D] = eig(A)
V = 3×3
1.0000 -1.0000 1.0000
0 0.0000 -0.0000
0 0 0.0000
D = 3×3
3 0 0
0 3 0
0 0 3
A tiene valores propios repetidos y los vectores propios no son independientes. Esto significa que A no es diagonalizable y, por tanto, es defectuosa.
Compruebe que V y D satisfacen la ecuación, A*V = V*D, aunque A sea defectuosa.
A*V - V*D
ans = 3×3
10-15 ×
0 0.8882 -0.8882
0 0 0.0000
0 0 0
Lo ideal es que la descomposición de valores propios satisfaga la relación. Dado que eig realiza la descomposición utilizando cálculos de punto flotante, A*V puede, en el mejor de los casos, aproximarse a V*D. En otras palabras, A*V - V*D está cerca, aunque no exactamente, de 0.
Cree dos matrices, A y B y, a continuación, resuelva el problema de valores propios generalizados correspondiente a los valores propios y los vectores propios derechos del par (A,B).
A = [1/sqrt(2) 0; 0 1]; B = [0 1; -1/sqrt(2) 0]; [V,D]=eig(A,B)
V = 2×2 complex
1.0000 + 0.0000i 1.0000 + 0.0000i
0.0000 - 0.7071i 0.0000 + 0.7071i
D = 2×2 complex
0.0000 + 1.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 - 1.0000i
Compruebe que los resultados satisfacen A*V = B*V*D.
A*V - B*V*D
ans = 2×2
0 0
0 0
El error residual A*V - B*V*D es exactamente cero.
Cree una matriz simétrica mal condicionada que contenga valores cercanos a la precisión de la máquina.
format long e A = diag([10^-16, 10^-15])
A = 2×2
1.000000000000000e-16 0
0 1.000000000000000e-15
Calcule los valores propios generalizados y un conjunto de vectores propios derechos con el algoritmo predeterminado. En este caso, el algoritmo predeterminado es "chol".
[V1,D1] = eig(A,A)
V1 = 2×2
1.000000000000000e+08 0
0 3.162277660168380e+07
D1 = 2×2
9.999999999999999e-01 0
0 1.000000000000000e+00
Después, calcule los valores propios generalizados y un conjunto de vectores propios derechos con el algoritmo "qz".
[V2,D2] = eig(A,A,"qz")V2 = 2×2
1 0
0 1
D2 = 2×2
1 0
0 1
Compruebe hasta qué punto el resultado de "chol" satisface A*V1 = A*V1*D1.
format short
A*V1 - A*V1*D1ans = 2×2
10-23 ×
0.1654 0
0 -0.6617
A continuación, compruebe hasta qué punto el resultado de "qz" satisface A*V2 = A*V2*D2.
A*V2 - A*V2*D2
ans = 2×2
0 0
0 0
Cuando ambas matrices son simétricas, eig utiliza el algoritmo "chol" de forma predeterminada. En este caso, el algoritmo QZ devuelve resultados más precisos.
Cree una matriz identidad de 2 por 2, A, y una matriz singular, B.
A = eye(2); B = [3 6; 4 8];
Si intenta calcular los valores propios generalizados de la matriz con el comando [V,D] = eig(B\A), MATLAB® devuelve un error porque B\A produce valores Inf.
En su lugar, calcule los valores propios generalizados y los vectores propios derechos pasando ambas matrices a la función eig.
[V,D] = eig(A,B)
V = 2×2
-0.7500 -1.0000
-1.0000 0.5000
D = 2×2
0.0909 0
0 Inf
Es mejor pasar ambas matrices por separado y dejar que eig elija el mejor algoritmo para resolver el problema. En este caso, eig(A,B) devuelve un conjunto de vectores propios y al menos un valor propio real, aunque B no sea invertible.
Compruebe que para el primer valor propio y el primer vector propio.
eigval = D(1,1); eigvec = V(:,1); A*eigvec - eigval*B*eigvec
ans = 2×1
10-15 ×
0.1110
0.2220
Lo ideal es que la descomposición de valores propios satisfaga la relación. Dado que la descomposición se realiza utilizando cálculos de punto flotante, A*eigvec puede, en el mejor de los casos, acercarse a eigval*B*eigvec, como ocurre en este caso.
Argumentos de entrada
Matriz de entrada, especificada como matriz cuadrada real o compleja.
Tipos de datos: double | single
Soporte de números complejos: Sí
Matriz de entrada del problema de valores propios generalizados, especificada como matriz cuadrada de valores reales o complejos. B debe tener el mismo tamaño que A.
Tipos de datos: double | single
Soporte de números complejos: Sí
Opción de equilibrado, especificada como "balance", que habilita un paso de equilibrado preliminar, o "nobalance", que lo deshabilita. En la mayoría de los casos, el paso de equilibrado mejora el condicionamiento de A para producir resultados más precisos. Sin embargo, hay casos en los que el equilibrado produce resultados incorrectos. Especifique "nobalance" cuando A contenga valores cuya escala difiera drásticamente. Por ejemplo, si A contiene enteros distintos de cero, así como valores muy pequeños (cercanos a cero), el paso de equilibrado podría escalar los valores pequeños para hacerlos tan significativos como los enteros y producir resultados inexactos.
"balance" es el comportamiento predeterminado. Para obtener más información acerca del equilibrado, consulte balance.
Algoritmo de valores propios generalizados, especificado como "chol" o "qz", que selecciona el algoritmo que se utilizará para calcular los valores propios generalizados de un par.
| algoritmo | Descripción |
|---|---|
"chol" | Calcula los valores propios generalizados de A y B utilizando la factorización de Cholesky de B. Si A no es simétrica (hermítica) o si B no es definida positiva simétrica (hermítica), eig usa el algoritmo QZ. |
"qz" | Usa el algoritmo QZ, también conocido como descomposición generalizada de Schur. Este algoritmo ignora la simetría de A y B. |
En general, los dos algoritmos devuelven el mismo resultado. El algoritmo QZ puede ser más estable en determinados problemas, como los que incluyen matrices mal condicionadas.
Independientemente del algoritmo que especifique, la función eig siempre utiliza el algoritmo QZ cuando A o B no son simétricas.
Formato de salida de los valores propios, especificado como "vector" o "matrix". Esta opción permite especificar si los valores propios se devuelven en un vector columna o en una matriz diagonal. El comportamiento predeterminado varía en función del número de salidas especificadas:
Si especifica una salida, como
e = eig(A), los valores propios se devuelven de forma predeterminada como un vector columna.Si especifica dos o tres salidas, como
[V,D] = eig(A), los valores propios se devuelven de forma predeterminada como una matriz diagonal,D.
Ejemplo: D = eig(A,"matrix") devuelve una matriz diagonal de valores propios con la sintaxis de una salida.
Argumentos de salida
Valores propios, devueltos como un vector columna que contiene los valores propios (o valores propios generalizados de un par) con multiplicidad. Cada valor propio e(k) se corresponde con el vector propio derecho V(:,k) y el vector propio izquierdo W(:,k).
Cuando
Aes una matriz real simétrica o compleja hermítica, los valores deeque satisfacen Av = λv son reales.Cuando
Aes una matriz real antisimétrica o compleja antihermítica, los valores deeque satisfacen Av = λv son imaginarios.
Dependiendo de si especifica una o varias salidas, eig puede devolver diferentes valores propios que siguen siendo numéricamente precisos.
Vectores propios derechos, devueltos como una matriz cuadrada cuyas columnas son los vectores propios derechos de A o vectores propios derechos generalizados del par, (A,B). La forma y normalización de V dependen de la combinación de argumentos de entrada:
[V,D] = eig(A)devuelve la matrizV, cuyas columnas son los vectores propios derechos deA, de manera queA*V = V*D. Los vectores propios deVse normalizan de modo que la norma 2 de cada uno sea 1.Si
Aes una matriz real simétrica, hermítica o antihermítica, los vectores propios derechos deVson ortonormales.[V,D] = eig(A,"nobalance")también devuelve una matrizV. Sin embargo, la norma 2 de cada vector propio no es necesariamente 1.[V,D] = eig(A,B)y[V,D] = eig(A,B,algorithm)devuelvenVcomo una matriz cuyas columnas son los vectores propios derechos generalizados que satisfacenA*V = B*V*D. La norma 2 de cada vector propio no es necesariamente 1. En este caso,Dcontiene los valores propios generalizados del par,(A,B), a lo largo de la diagonal principal.Cuando
eigutiliza el algoritmo"chol"conAsimétrica (hermítica) yBsimétrica (hermítica) definida positiva, normaliza los vectores propios deVpara que la normaBde cada uno sea 1.
Diferentes máquinas y versiones de MATLAB® pueden producir diferentes vectores propios que siguen siendo numéricamente precisos:
En el caso de los vectores propios reales, su signo puede cambiar.
En el caso de los vectores propios complejos, estos pueden multiplicarse por cualquier número complejo de magnitud 1.
En el caso de un valor propio múltiple, sus vectores propios pueden volver a combinarse mediante combinaciones lineales. Por ejemplo, si Ax = λx y Ay = λy, A(x+y) = λ(x+y), por lo que x+y también es un vector propio de A.
Valores propios, devueltos como una matriz diagonal con los valores propios de A en la diagonal principal o los valores propios del par, (A,B), con multiplicidad, en la diagonal principal. Cada valor propio D(k,k) se corresponde con el vector propio derecho V(:,k) y el vector propio izquierdo W(:,k).
Cuando
Aes una matriz real simétrica o compleja hermítica, los valores deDque satisfacen Av = λv son reales.Cuando
Aes una matriz real antisimétrica o compleja antihermítica, los valores deDque satisfacen Av = λv son imaginarios.
Dependiendo de si especifica una o varias salidas, eig puede devolver diferentes valores propios que siguen siendo numéricamente precisos.
Vectores propios izquierdos, devueltos como una matriz cuadrada cuyas columnas son los vectores propios izquierdos de A o vectores propios izquierdos generalizados del par, (A,B). La forma y normalización de W dependen de la combinación de argumentos de entrada:
[V,D,W] = eig(A)devuelve la matrizW, cuyas columnas son los vectores propios izquierdos deA, tales queW'*A = D*W'. Los vectores propios deWse normalizan de modo que la norma 2 de cada uno sea 1. SiAes simétrica,Wes igual queV.[V,D,W] = eig(A,"nobalance")también devuelve una matrizW. Sin embargo, la norma 2 de cada vector propio no es necesariamente 1.[V,D,W] = eig(A,B)y[V,D,W] = eig(A,B,algorithm)devuelvenWcomo una matriz cuyas columnas son los vectores propios izquierdos generalizados que satisfacenW'*A = D*W'*B. La norma 2 de cada vector propio no es necesariamente 1. En este caso,Dcontiene los valores propios generalizados del par,(A,B), a lo largo de la diagonal principal.Si
AyBson simétricas,Wes igual queV.
Diferentes máquinas y versiones de MATLAB pueden producir diferentes vectores propios que siguen siendo numéricamente precisos:
En el caso de los vectores propios reales, su signo puede cambiar.
En el caso de los vectores propios complejos, estos pueden multiplicarse por cualquier número complejo de magnitud 1.
En el caso de un valor propio múltiple, sus vectores propios pueden volver a combinarse mediante combinaciones lineales. Por ejemplo, si Ax = λx y Ay = λy, A(x+y) = λ(x+y), por lo que x+y también es un vector propio de A.
Más acerca de
Una matriz cuadrada,
A, es simétrica si es igual a su traspuesta no conjugada,A = A.'.En términos de los elementos de la matriz, esto significa que
Dado que las matrices reales no se ven afectadas por la conjugación compleja, una matriz real que es simétrica también es hermítica. Por ejemplo, la matriz
es simétrica y hermítica.
Una matriz cuadrada,
A, es antisimétrica si es igual a la negación de su traspuesta no conjugada,A = -A.'.En términos de los elementos de la matriz, esto significa que
Dado que las matrices reales no se ven afectadas por la conjugación compleja, una matriz real que es antisimétrica también es antihermítica. Por ejemplo, la matriz
es antisimétrica y antihermítica.
Una matriz cuadrada,
A, es hermítica si es igual a su traspuesta conjugada compleja,A = A'.En términos de los elementos de la matriz,
Las entradas de la diagonal de una matriz hermítica son siempre reales. Dado que las matrices reales no se ven afectadas por la conjugación compleja, una matriz real que es simétrica también es hermítica. Por ejemplo, esta matriz es simétrica y hermítica.
Los valores propios de una matriz hermítica son reales.
Una matriz cuadrada,
A, es antihermítica si es igual a la negación de su traspuesta conjugada compleja,A = -A'.En términos de los elementos de la matriz, esto significa que
Las entradas de la diagonal de una matriz antihermítica son siempre imaginarias puras o cero. Dado que las matrices reales no se ven afectadas por la conjugación compleja, una matriz real que es antisimétrica también es antihermítica. Por ejemplo, la matriz
es antihermítica y antisimétrica.
Los valores propios de una matriz antihermítica son puramente imaginarios o cero.
Sugerencias
La función
eigpuede calcular los valores propios de matrices dispersas que sean reales y simétricas. Para calcular los vectores propios de una matriz dispersa o para calcular los valores propios de una matriz dispersa que no sea real y simétrica, utilice la funcióneigs.
Capacidades ampliadas
Notas y limitaciones de uso:
Vpodría representar una base diferente de vectores propios. Esta instrucción significa que los vectores propios calculados por el código generado podrían ser diferentes a los vectores propios calculados en la ejecución de MATLAB. Los valores propios deDpueden no estar en el mismo orden que en MATLAB. Para verificar los valoresVyD, compruebe que:Si
[V,D] = eig(A), la matriz residualA*V - V*Des pequeñaSi
[V,D] = eig(A,B), la matriz residualA*V - B*V*Des pequeña
Si especifica la clase callback de la biblioteca LAPACK, el generador de código admitirá estas opciones:
El cálculo de los vectores propios izquierdos.
Las salidas son complejas.
La generación de código no es compatible con entradas de matrices dispersas en esta función.
Consulte las notas y limitaciones de uso en la sección de generación de código C/C++. Las mismas notas y limitaciones de uso son aplicables a la generación de código GPU.
La función eig es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en entornos basados en subprocesos.
La función eig es compatible con entradas de arreglos de GPU con estas notas y limitaciones de uso:
Para el caso generalizado,
eig(A,B),AyBdeben ser reales simétricas o complejas hermíticas. Además,Bdebe ser definida positiva.El algoritmo QZ,
eig(A,B,"qz"), no es compatible.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
La función eig es compatible con arreglos distribuidos con estas notas y limitaciones de uso:
Para el caso generalizado,
eig(A,B),AyBdeben ser reales simétricas o complejas hermíticas. Además,Bdebe ser definida positiva.Estas sintaxis no son compatibles con arreglos distribuidos completos:
[__] = eig(A,B,"qz")[V,D,W] = eig(A,B)
Para obtener más información, consulte Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006aeig devuelve valores NaN cuando la entrada contiene valores no finitos (Inf o NaN). Anteriormente, eig daba error cuando la entrada contenía valores no finitos.
Se ha mejorado el algoritmo para las matrices de entrada que son antihermíticas. Con la llamada a la función [V,D] = eig(A), donde A es antihermítica, eig garantiza que la matriz de vectores propios V es unitaria y la matriz diagonal de valores propios D es puramente imaginaria.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)