Вы находитесь на странице: 1из 7

Tema:

MÉTODOS PARA OBTENER VALORES Y VECTORES PROPIOS: MÉTODO DE LA


POTENCIA, ITERACIÓN INVERSA E ITERACIÓN INVERSA CON CORRIMIENTO

Objetivos
- Hallar los valores propios y vectores propios de matrices no singulares y cuadradas
mediante métodos iterativos.
- Entender y utilizar los conceptos de valores propios y vectores propios para recrear
algoritmos que permitan hallar el vector propio del mayor valor propio, del menor valor
propio y de cualquier valor propio de posición intermedia.
- Hallar el coeficiente de Rayleigh para hallar los valores propios de cada vector
encontrado por cada método.

Marco teórico
Antes de empezar, es necesario dar una introducción sobre los valores propios y vectores
propios de una matriz. En primer lugar, los vectores propios, autovectores o eigenvectores de
una matriz cuadra, son los vectores no nulos que, al realizar la transformación con respecto a la
matriz (producto vectorial 𝐴𝑥⃑), dan lugar a un múltiplo escalar de sí mismos (𝜆𝑥⃑), con lo que no
cambian su dirección, y éste escalar 𝜆 recibe el nombre valor
propio, autovalor, valor característico o eigenvalor. Por lo que
se cumple la igualdad obtenida del polinomio característico:

Entonces, los vectores propios no son afectados en una transformación lineal, o son múltiplos
escalares de sí mismo luego de dicha transformación. Por la utilidad en diversos campos de la
ingeniería y otros campos científicos, la necesidad de obtener autovalores y autovectores es
importante, pero se necesitan de ciertos métodos para obtenerlos puesto que, para matrices
muy grandes, el polinomio característico es poco conveniente, entonces, se necesitan métodos
los cuales engloban poderosas demostraciones e igualdades matemáticas que agiliten dicho
proceso. En este informe se estudiarán tres de estos métodos: método de la potencia, método
de iteración inversa y método de iteración inversa con corrimiento.

El método de la potencia se utiliza


para obtener el valor propio máximo
de una matriz tal que el conjunto de
estos valores propios sean todos reales y distintos y que los vectores propios sean todos
linealmente independientes. El método se basa en el empleo de un vector arbitrario unitario
inicial que, mediante la reiterada multiplicación por la matriz A y redefiniéndolo como el nuevo
vector de entrada (unitario), irá tomando la dirección del vector propio máximo, entonces,
obtenido el vector ya sea por número máximo de iteraciones o por la tolerancia dada, se podrá
obtener el valor propio asociado como muestran las siguientes fórmulas:
Sean: , y entonces se tiene que:

Donde la primera expresión es la fórmula del método descrita, el segundo término el nuevo
vector, y el tercero, la forma de hallar el valor propio asociado mediante el coeficiente de
Rayleigh.
El método de la potencia inversa, o método de la
iteración inversa, tiene el mismo principio que el
método de la potencia convencional, a diferencia
que en éste caso se necesita de la matriz inversa de
A (A-1), para la obtención del valor propio mínimo y su vector propio asociado. Lo que lo
diferencia del método anterior se basa en que, los valores propios de la inversa de una matriz
son sus recíprocos, por lo que, si se realiza el recíproco de cada autovalor, lo que obtenemos es
la imagen superior. Entonces, si encontramos el máximo de la inversa, si lo invertimos,
tendremos el mínimo valor propio de la matriz A. Por lo que el método quedaría definido de la
siguiente manera:

Para la solución del vector propio no usaremos la inversa, sino que la factorización LU enviando
a la función realizada en informes anteriores a la matriz 𝐴 y 𝑦⃑, que sería igual a la forma antes
estudiada de 𝐴𝑥⃑ = 𝑏⃑⃑. Hechas las iteraciones, se procedería a usar otra vez el coeficiente de
Rayleigh para obtener el valor propio asociado.

El método de la potencia inversa con corrimiento es un método que permite el cálculo del
autovalor más cercano a un número dado, en nuestro caso un 𝜇 dado que hará tender a un
vector arbitrario al autovalor deseado por medio de las iteraciones. El número 𝜇, que puede ser
real o complejo, es el encargado de trasladar a la matriz A y encaminar a x0 hacia el autovalor
más cercano en el algoritmo. Su aplicación efectiva requiere algún previo conocimiento de la
situación de los autovalores de la matriz dada porque, al fin y al cabo, necesita de otro método
(el cual no se muestra en el informe, pero se lo denomina los círculos de Gershgorin) para saber
por dónde acercarse a dicho autovalor y por ende hallar el autovector asociado. Este método
sigue el mismo sentido que los dos anteriores métodos, a diferencia que, el coeficiente Rayleigh,
es utilizado en las iteraciones para crear una
nueva lambda que se utilizará en la siguiente
iteración y así acercarse cada vez más al vector
propio y, por ende, al valor propio asociado. En
la parte izquierda se puede corroborar lo antes
dicho con el pseudocódigo de éste algoritmo.
Por esta razón éste método también es
llamado el método de iteración del coeficiente de Rayleigh.

Códigos:
En la presente sección se mostrarán los códigos de cada ejemplo con sus respectivas
explicaciones:
- Método de la potencia:

function [ valor, v ] = PotenciaV( A, x0, iter, tol )


if norm(x0)~=1
disp('Inserte un vector unitario');
valor='NaN';
v='NaN';
return
end
v=x0; %inicializa el vector v
tole=1;
cont=0;
while tole>tol && cont<iter
w=A*v; %Realiza el producto vectorial iterativo
v=w*(1/norm(w)); %Inicializa a w unitario como el nuevo v
tole=abs(norm(w)-norm(v)); %Tolerancia minima
cont=cont+1;
end
valor=v'*(A*v); %Aplica el coeficiente de Rayleigh
if (A*v)-(valor*v)>tol %Verifica el resultado
disp('no cumple la igualdad');
valor='NaN';
v='NaN';
return
end
disp('El valor propio maximo es: ');
disp(valor);
disp('El vector propio asociado es: ');
disp(v);
end

- Método de la potencia inversa:

function [ valor, v ] = PotenciavInver( A, x0, iter, tol )


if norm(x0)~=1
disp('Inserte un vector unitario');
valor='NaN';
v='NaN';
return
end
v=x0; %Inicializa el vector v
tole=1;
cont=0;
while tole>tol && cont<iter %Empieza el bucle, y despeja a w de A*w=v
w = LUSol(A, v); %mediante descomposicion LU
v = w*(1/norm(w)); %Inicializa a w unitario como el nuevo v
tole=abs(norm(w)-norm(v)); %Tolerancia minima
cont=cont+1;
end
valor=v'*(A*v); %Aplica el coeficiente de Rayleigh
if (A*v)-(valor*v)>tol %Verifica el resultado
disp('no cumple la igualdad');
valor='NaN';
v='NaN';
return
end
disp('El valor propio minimo es: ');
disp(valor);
disp('El vector propio minimo es: ');
disp(v);
end

- Método de la potencia inversa con corrimiento:

function [ valor, v ] = PotenciavInverCorr( A, x0, iter, tol, miu )


[n,m]= size(A);
if norm(x0)~=1
disp('Inserte un vector unitario');
valor='NaN';
v='NaN';
return
end
cont=0;
A=(A - miu*eye(n)); %Realiza la traslacion de la matriz A con
respecto
w = LUSol(A, x0); %a miu, luego soluciona w de A*w=x0
valor=x0'*w; %encuentra el primer valor propio para iterar
v=x0; %mediante el coeficiente de Rayleigh
error=tol*abs(valor)+1; %Utiliza el error para mejorar la aproximacion
while error>tol*abs(valor) && abs(valor)~=0 && cont<iter
w = LUSol(A, v); %Realiza otra vez la solucion de A*w=v;
v = w*(1/norm(w)); %Inicializa a w unitario como el nuevo v
valornuevo=v'*w; %Obtiene el nuevo valor propio con el
error=abs(valornuevo-valor); %coeficiente de Rayleigh
valor=valornuevo; %Inicializa al valor de la iteracion
anterior
cont=cont+1; %con el nuevo valor hallado
end
valor=(1/valor) + miu; %Utiliza el reciproco del valor final
hallado
if (A*v)-(valor*v)>tol %y le suma el valor miu que fue restado al
disp('no cumple la igualdad'); %al inicio en la matriz A. Luego
valor='NaN'; %compara el resultado
v='NaN';
return
end
disp('El valor propio con el miu utilizado se acerco a: ');
disp(valor);
disp('El vector propio con el miu utilizado se acerco a: ');
disp(v);
end

- Solución de sistemas de ecuaciones lineales por LU con pivoteo

function [ x ] = LUSol( A, b )
[L, U, b]= LUgaussPiv(A, b);
[n,n]=size(L);
y=zeros(n,1);
x=zeros(n,1);
%Inicia el proceso de sustitucion progresiva
for i=2:n
aux=b(i);
for j=1:i-1
aux= aux - (L(i,j)*b(j));
end
b(i)=aux;
end
y(n)=(b(n)/L(n,n));
for i=n-1:-1:1;
aux=0;
for j=i+1:n
aux= aux + (L(i,j)*y(j));
end
y(i)=(b(i)-aux)/L(i,i);
end
% disp('El vector y es: ');
% disp(y);
%Inicia el proceso de sustitucion regresiva
x(n)=(y(n)/U(n,n));
for i=n-1:-1:1;
aux=0;
for j=i+1:n
aux= aux + (U(i,j)*x(j));
end
x(i)=(y(i)-aux)/U(i,i);
end
% disp('El vector solucion del sistema es: ');
% disp(x);
end

function [L, U, b]=LUgaussPiv(A,b)


[n,m]= size(A);
if n ~= m;
disp('A no es una matriz cuadrada ');
return
end
max=abs(A(2,2)); %es el maximo relativo para el cambio de filas en el
pivoteo
mayor=0;
for k = 1:n-1
bandera=0; %Indicador de entrada a bucle
for r=k+1:n %Inicia el pivoteo por filas para encontrar el valor
% mas grande que evite una singularidad
if abs(A(r,k+1))> max
mayor=r; %Guarda el numero de la fila y el maximo nuevo
max=abs(A(r,k+1));
bandera=1;
end
end
if bandera==1 %Empieza el pivoteo
aux=A(k,:); %realiza los cambios de filas respectivos
A(k,:)= A(mayor,:);
A(mayor,:)=aux(:);
aux2=b(k);
b(k)=b(mayor);
b(mayor)=aux2;
end
for i = k+1:n
A(i,k) = A(i,k)/A(k,k);
if A(k,k) == 0 ,
error('Elemento diagonal nulo ');
end
for j = (k+1:n);
A(i,j) = A(i,j) - A(i,k)*A(k,j);
end
end
end
LU=A;
U=zeros(n);
for i=1:n
for j=i:n;
U(i,j)= LU(i,j);
end
end
L=eye(n);
for i=2:n
for j=1:i-1;
L(i,j)= LU(i,j);
end
end
% disp('La matriz U es: ');
% disp(U);
% disp('La matriz L es: ');
% disp(L);
% % disp('La matriz LU es: ');
% % disp(LU);
% disp('El vector b reordenado es: ');
% disp(b);
end

Ejercicios:
1. Obtenga los valores propios máximos y mínimos de la siguiente matriz A, luego,
mediante un miu 𝜇 = −212, acercarse a un valor propio y vector propio. De
conclusiones.
8 1 2 3
Sea 𝐴 = | 1 7 3 −8 |
2 3 6 −17
14 −13 −9 1
1/√4
1/√4|
Sea un vector 𝑥0 = ||
1/√4|
1/√4

Entonces, si a los algoritmos ponemos un máximo de iteraciones de 100, una tolerancia de


0.000001, y 𝜇 = −212, podemos obtener lo pedido:

Ahora, como vemos obtuvimos tres valores propios y tres vectores propios distintos. El primero
que nos muestra la consola es el valor máximo obtenido por el método de la Potencia. Para
corroborar éste resultado, utilizaremos la función eig(A) de MatLab®, la cual nos arroja una
matriz de vectores columna que resultan los vectores propios de la matriz A, y otra matriz
diagonal con los autovalores de la misma matriz:
Si comparamos los resultados de la primera respuesta, se puede observar que el valor de 21.913
es el autovalor máximo y que posee los mismos autovectores que la función de MatLab®. Por lo
tanto, el método de la potencia fue un éxito. En segundo lugar, tenemos el valor propio menor
igual a 3.5725, el cual, de la misma manera posee el mismo resultado de la función de MatLab®,
además de ser el mínimo de los cuatro autovalores obtenidos por esa función. Finalmente, el
último resultado es el del autovalor hallado mediante la traslación de A realizada por 𝜇 = −212.
Un que no sabes de qué forma se acerca a dicho valor propio el método de la potencia inversa
con corrimiento, el resultado que arroja dicho algoritmo posee un autovalor de -13.511 idéntico
al arrojado por la función de MatLab®. Por lo que este último método también es un éxito.
Para concluir, los métodos son muy eficaces, pero hay situaciones en que los autovalores varían
considerablemente del autovalor original por lo que los algoritmos deben ser repotenciado para
evitar esos errores.

Resultados y Conclusiones
Si bien se obtuvieron los valores propios máximo y mínimo de una matriz cuadrada no singular,
el objetivo más importante es encontrar todos los autovalores de una matriz. El problema que
surge del tercer método es que, para obtener todos los autovalores, es necesario tener un
conocimiento previo de por donde se encuentra para acercar con una traslación de la matriz A,
lo que dificulta encontrar todos los autovalores y, por ende, todos los autovectores de la matriz.
Si bien todos los tres métodos convergen a valores distintos, normalmente el tercer método, en
esta práctica, converge a los valores extremos por alguna razón y por consecuencia, es difícil
acertar a un valor propio diferente.
Se recomienda el uso de algún método más potente para la obtención de los autovalores y
autovectores de una matriz A, como el método QR que se presenta más adelante en los libros
de bibliografía.

Referencias
Panju, M. (s.f.). Iterative Methods for Computing Eigenvalues and Eigenvectors. The Waterloo
Mathematics Review, 9-13.
QUARTERONI, A., & SALERI, F. (2006). Cálculo Científico con Matlab y Octave. Milán: Springer.

Вам также может понравиться