Академический Документы
Профессиональный Документы
Культура Документы
DEMOSTRACION:
Algoritmo QR
El Algoritmo QR es un algoritmo usado en lgebra lineal para el clculo de
valores y vectores propios de una matriz. Se basa en la descomposicin QR,
desarrollada en la dcada de 1950 por John G.F. Francis (Reino Unido) y Vera N.
Kublanovskaya (URSS), de forma independiente.1
luego todas las Ak son matrices semejantes y por tanto tienen los mismos valores propios.
El algoritmo es numricamente estable porque opera por transformaciones ortogonales.
Bajo ciertas condiciones2 las matrices Ak convergen a una matriz triangular que es
la triangulacin de Schur de A. Dado que los valores propios de una matriz triangular
estn listados en su diagonal, se pueden obtener directamente entonces. Comprobar su
convergencia es imprctico, pero se puede acotar el error por el Teorema de Gerschgorin.
El algoritmo QR se puede considerar una versin ms sofisticada del mtodo de las potencias.
Ambos mtodos multiplican repetidamente un vector por la matriz de la que se quieren
conocer los valores propios, normalizando despus de cada iteracin. As este converge a los
valores deseados.
Sin embargo, mientras que el mtodo de las potencias solo proporciona el mayor de los
valores propios, el mtodo QR usa la descomposicin homnima para normalizar y
ortogonalizar tras cada iteracin. As para el valor final cuando converge AQ=Q se obtiene
la matriz diagonal que contiene todos los valores propios y por tanto Q queda con los
vectores propios en las columnas.
operaciones. Sin
embargo, la matriz de Hessenberg es casi triangular, por lo que su uso como punto de partida
reduce el nmero de iteraciones para que el algoritmo converja.
Si la matriz original es una matriz simtrica, la matriz de Hessenberg es tambin simtrica y
por tanto tridiagonal. Como ella, lo sern todas las Ak. Entonces el proceso
ocupa
operaciones.5
Otras variantes
Una variante del algoritmo QR es el algoritmo Golub-Kahan-Reinsch, que empieza reduciendo
una matriz a bidiagonal.6Dicha variante fue descrita por primera vez por Golub y Kahan (1965).
La subrutina LAPACK de DBDSQR implementa este mtodo iterativo con algunas
modificaciones para cubrir el caso de que los valores sean demasiado pequeos (Demmel y
Kahan, 1990). Junto a un primer paso usando reflexiones de Householder y, si procede,
la descomposicin QR, esto forma la rutina DGESVD para el clculo de la descomposicin en
valores singulares.
Historia
El algortimo QR fue precedido por el algoritmo LR, que se apoya en la descomposicin LU. El
algoritmo QR es en comparacin ms estable as que le desplaz y el LR es poco usado hoy
en da. Sin embargo, fue el primer paso hacia las tcnicas actuales QR.
Este algoritmo fue modificado para que funcionara tambin con matrices de "rango
deficiente" (lo opuesto a "rango completo"), y que devolviera la factorizacin completa;
esto ltimo se hace completando las columnas de la matriz Q, las cuales son ortogonales
entre s. En palabras del curso de lgebra Lineal: "completando la base ortonormal del
espacio vectorial generado por las columnas de Q". Dicho de otra forma: aplicando
el Teorema de la Base Ortonormal Incompleta.
El cdigo en Matlab es:
function [Q, R] = gsC(A)
clc;
[m, n] = size(A);
R = zeros(m, n);
V = A;
Q=zeros(m, n);
k=1; % inicializo eta variable, slo la uso para matrices de rango
deficiente
for i =1:n
R(i,i)= norm(V(:,i));
if abs(R(i,i)) > 1.0e-10
Q(:,i)= V(:,i)/R(i,i);
else
fila problemtica de A
Q(:,i)= r;
Q(k, i)=1;
k=k+1;
Q2 = Q; % Q2 tendr los valores de Q, en Q ir la nueva base
ortonormal
% ortogonalizo otra vez aplicando Gram-Schmidt a la matriz Q para
% hallar un vector con el qu reemplazar a la fila problemtica y
% seguir teniendo una base ortonormal
for j = 1 : i-1
r(j) = (Q2(:,j)')*Q2(:,i);
Q(:,i)=Q(:,i) - r(j)*Q2(:,j);
Q(:,i)=Q(:,i)/norm(Q(:,i));
end
end
for j=i+1:n
R(i,j)= (Q(:,i)')*V(:,j);
V(:,j)=V(:,j) - R(i,j)*Q(:,i);
end
end
% hasta aqu Q y R son la descomposicin reducida
% ac hallo la completa, Gram Schmidt otra vez
if m > n
I = eye(m, m - n);
Q=[Q I];
V=Q;
r= zeros(1, m);
k=0;
for i=n+1:m
for j = 1 : n + k
r(j) = (V(:,j)')*V(:,i);
Q(:,i)=Q(:,i) - r(j)*V(:,j);
Q(:,i)=Q(:,i)/norm(Q(:,i));
end
k=k+1;
end
end
"A" es una matriz cualquiera, la funcin devuelve dos matrices: Q (la matriz ortonormal) y
R (la matriz triangular)