Práctica 8 Cálculo de autovalores 8.1. Método de la potencia El método de la potencia para el cálculo del autovalor dominante de una matriz se basa en el siguiente teorema. Teorema 8.1.1 (M. de la potencia] Dada una matriz A ∈ Rn×n que tiene n autovalores distintos λ1 , . . . , λn que están ordenados de forma que |λ1 | > |λ2 | ≥ · · · ≥ |λn | �T � Si se elige x0 de forma adecuada las sucesiones Xk = x1 , xk2 , . . . , xn y ck que se generan del siguiente modo: y0 = Ax0 , yk = Axk , y xk+1 = donde xk+1 , ck+1 �� �� ck+1 = máx �xki � , 1≤i≤n converge al autovector dominante de A y al autovalor dominante. O sea, lı́m ck = λ1 , k→∞ lı́m xk = v1 . k→∞ El método de la potencia se puede implementar mediante la siguiente función de Matlab: 44 function [lambda,V]=potencia(A,x,epsilon,max1) % Input A: una matrix nxn % x: aproximacion inicial para el autovector % epsilon: tolerancia % max1: numero maximo de iteraciones % % Output lambda: el autovalor dominante % V: el autovalor dominante % lambda=0; cnt=0; err=1; estado=1; while((cnt<=1)&(estado==1)) y=A*x; [m,j]=max(abs(y)); c1=m; y=y/c1; % test de los errores dc=abs(lambda-c1); dv=norm(x-y); err=max(dc,dv); x=y; lambda=c1; estado=0; if (err>epsilon) estado=1; end cnt=cnt+1; end v=x; 45 8.2. Método de iteración del subespacio Cuando se manejan matrices grandes y dispersas calcular todos sus autovalores y sus correspondientes autovectores es un proceso muy costoso. En general, para este tipo de matrices se considera un problema parcial de autovalores. Ası́ si A ∈ � × �, se buscan p (p << n) autovalores dominantes, λ1 , λ2 , . . . , λp y sus correspondientes autovectores x1 , . . . , xp , de forma que AX = XΛ con X = (x1 , . . . , xp ) , Λ = diag (λ1 , . . . , λp ) Para resolver este problema numéricamente se suelen utilizar métodos iterativos cuya operación principal es el producto matriz-vector. Un ejemplo de este tipo de métodos es el método de iteración del subespacio. El método de iteración del subespacio prácticamente se basa en continuas repeticiones de productos AX, empezando desde una solución inicial, X 0 , hasta la obtención de los autovectores asociados a los autovalores dominantes de la matriz A, y en cada iteración, es necesario transformar la matriz X para que no pierda la propiedad de ortonormalidad. El producto de AX se calcula ejecutando los productos matriz-vector Ax, donde x representa cualquier columna de X. Describiremos, a continuación, dos algoritmos del método de iteración del subespacio. El primero, hace uso de la proyección de Rayleigh-Ritz no simétrica, y el segundo, se basa en la proyección de Rayleigh-Ritz simétrica.. 8.2.1. Método de Iteración del Subespacio con proyección de Rayleigh- Ritz no Simétrica. El primer algoritmo que vamos a describir se basa en el método de Iteración del Subespacio multipaso con una proyección de Rayleigh-Ritz no simétrica, que se estructura en los siguientes pasos: Algoritmo 1: 1.- Comienzo: Elegir un sistema incial de vectores linealmente independientes X 1 = {x1 , x2 , ..., xp } , y un valor inicial del parámetro de iteración, iter. El algoritmo desarrollado permite al usuario elegir entre tomar como estimación inicial los vectores que generan el subespacio invariante, 46 obtenidos en casos previos, o generan una base de p vectores, cuyas componentes se eligen como números aleatorios del intervalo [−1, 1]. La base elegida se ortonormaliza mediante el algoritmo de Gram-Schmidt modificado. Inicializar k = 1. 2.- Bucle de Autovalores: Mientras no se de la convergencia, hacer: a) Para i = 1 hasta iter Calcular Z k = AX k Asignar X k = Z k Fin para. b) Ortonormalizar Z k en Z k+1 , usando el algoritmo de Gram-Schmidt modificado. c) Calcular la proyección de Rayleigh-Ritz Âk+1 = (Z k+1 )T AZ k+1 . d) Resolver el problema de autovalores p−dimensional Âk+1 = Qk+1 Δk+1 (Qk+1 )T , con Δk+1 = diag(s1 , s2 , ..., sp )k+1 , donde (si )k+1 es un autovalor de Âk+1 que es una aproximación a un autovalor dominante de A. e) Calcular la nueva solución inicial X k+1 = Z k+1 Qk+1 . f ) Comprobar el criterio de convergencia. g) k = k + 1. Fin mientras. El criterio de convergencia empleado es el siguiente: � � �abs(xk+1 ) − abs(xki )� i � � < tol; i = 1, ..., p, �abs(xk+1 )� i (8.1) donde � � es la 2-norma de un vector, y abs(xk+1 ) es el vector resultante de i tomar el módulo de las componentes de la columna i−ésima de la matriz X k+1 . Hemos considerado el valor absoluto de las componentes del vector debido al hecho de que algunos autovectores, de una iteración a la siguiente cambian su orientación, y esto provoca un cambio de signo global en el autovector. Los valores tı́picos que se han tomado para el parámetro del criterio de convergencia, tol, han sido 10−3 y 10−4 . Una vez satisfecho el criterio de convergencia en el algoritmo anterior, se obtienen directamente los p autovalores dominantes de la matriz A, (sk+1 ), i k+1 i = 1, ..., p, y sus correspondientes autovectores, {xk+1 , ...., x }. 1 p 47 8.2.2. Método de Iteración del Subespacio con Proyección de Rayleight-Ritz Simétrica. Este método es similar al expuesto anteriormente, la diferencia principal es que utiliza la proyección de Rayleigh-Ritz simétrica en vez de la no simétrica. El método puede estructurarse de la siguiente forma: Algoritmo 2: 1.- Comienzo: Elegir una base inicial X 1 = {x1 , ...., xp } de p vectores de la matriz A. Los vectores se eligen de la misma forma que en el algoritmo anterior, y son normalizados utilizando el algoritmo de Gram-Schmidt modificado. Inicializar el contador, k = 1. 2.- Bucle de Autovalores: Mientras no se de el criterio de convergencia: a) Calcular Z k = AX k . b) Formar la proyección de Rayleigh-Ritz simétrica Âk+1 = (Z k+1 )T Z k+1 c) Resolver el problema de autovalores p−dimensional Âk+1 Qk+1 = Qk+1 (Δk+1 )2 , con (Δk+1 )2 = diag(s21 , s22 , ..., s2p )k+1 , donde (s2i )k+1 es un autovalor de Âk+1 . Y calcular la matriz trasformación T k+1 = Qk+1 (Δk+1 )−1 . d) Construir la nueva solución inicial orotnormal X k+1 = Z k+1 Qk+1 . e) Comprobar el criterio de convergencia. f ) k = k + 1. Fin mientras. El criterio de convergencia usado en este algoritmo, es el mismo que se ha utilizado en el algoritmo anterior, (8.1). Si utilizamos el primer algoritmo, una vez logrado el criterio de convergencia del buble de autovalores, se obtienen directamente los p autovalores dominantes de la matriz A y sus correspondientes autovectores asociados. Mientras 48 que si se utiliza el segundo algoritmo, al cumplirse el criterio de convergencia, se obtiene una base ortonormal, X k+1 , del subespacio engendrado por los p autovectores dominantes de la matriz A. Para calcular los pautovectores asociados a los p autovalores dominantes de la matriz A, X = {x1 , ....., xp }, debemos calcular una matriz de transformación, U , de tal forma que X = X k+1 U . La matriz U es de dimensión p × p. Para calcular esta matriz, partimos del problema de autovalores inicial AX = XΛ , donde Λ es una matriz diagonal cuyos elementos son los p-autovalores dominantes de A. Multiplicando esta ecuación por (X k+1 )T obtenemos la matriz U como solución del problema de autovalores p-dimensional B̂U = U Λ , donde B̂ = (X k+1 )T AX k+1 . 8.3. Ejercicios E.1 Obtén el autovalor y el autovector dominante de la matriz 7 6 −3 A = −12 −20 24 −6 −12 16 E.2 Un proceso de Markov se puede describir por una matriz cuadrada cuyas entradas son todas positivas y su suma vale 1. Por ejemplo, si P0 = T (x0 , y 0 , z 0 ) es el número de personas en una ciudad que prefieren la marca X, Y y Z, respectivamente. Cada mes la gente decide usar la misma marca o cambiar de marca. La probabilidad que el ususario de la marca X cambie a la marca Y o Z es 0,3 y 0,3, respectivamente. La probabilidad que un usuario de la marca Y cambie a la marca Z o Z es 0,3 y 0,2, respectivamente. La probabilidad que un usuario de la marca Z cambia a la marca X o a la marca Y es 0,1 y 0,3, respectivamente. La matriz de transición para el proceso es k 0,4 0,3 0,1 x yk 0,3 0,5 0,3 Pk+1 = APk = A = zk 0,3 0,2 0,6 49 Si existe un P de forma que AP = P , entonces P es un autovector de A con autovalor 1. Además P es un estado estacionario del proceso de Markov. Comprueba que λ = 1 es un autovalor de A y obtén un posible estado estacionario. E.3.- Dada la matriz 0 11 −5 A = −2 17 −7 −4 26 −10 se sabe que tiene un autovalor cercano a 0,5. Implementa el método de la potencia inversa para obtener este autovalor de A y su correspondiente autovector. E.4.- Como ya vimos, los vectores almacenados en los ficheros V.dat, I.dat y J.dat en la hoja web http://personales.upv.es/dginesta/docencia/docencia.htm definen una matriz dispersa en formato coordenando. Utiliza el método de la potencia combinado con el método de defacción de Wielandt para obtener los tres primeros autovalores dominantes de esta matriz y sus correspondientes autovectores. Implementa las dos versiones del método de iteración del subespacio expuestas anteriormente y utilizalas para calcular los tres autovectores dominantes de la matriz y sus correspondientes autovectores. Comprueba los resultados utilizando la función eigs( ) de Matlab. 50