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

Factorizacin QR

En esta seccin se hablar de la descomposicin QR de una matriz,


donde Q es una matriz con columnas ortogonales (ortonormales) y R es
una matriz triangular inferior. Dicha descomposicin es de gran
importancia para resolver problemas de mnimos cuadrados y tiene una
estrecha relacin con el clculo de la inversa generalizada de una
matriz. En el caso de matrices cuadradas, dicha descomposicin es la
base de un algoritmo para determinar numricamente y de forma
iterativa, los valores propios de la matriz A (ver captulo 8 de [10]). En
primer lugar se hace aqu la discusin de la descomposicin QR para una
matriz A de rango columna completo. En este caso, la factorizacin se
basa en el proceso de ortogonalizacin de Gram-Schmidt descrito en
teorema 1.33. El siguiente teorema garantiza la existencia de una tal
factorizacin en dicho caso y su demostracin resume el proceso para
encontrarla.
Dada una matriz A (no necesariamente cuadrada), con columnas
linealmente independientes, encontraremos matrices Q, R tales que
(i) A = QR.
(ii) Las columnas de Q son ortonormales.
(iii) Q es del mismo tamao que A.
(iv) R es triangular superior invertible. La forma de hacerlo es aplicar el
proceso de Gram-Schmidt a las columnas de A.

Sea A Mmn una matriz de rango columna completo n. Entonces existen


matrices Q Mmn con columnas ortogonales (ortonormales) y R Mnn
triangular superior e invertible tales que A = QR

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

La idea bsica es usar dicha descomposicin para reescribir la matriz como el


producto de una matriz ortogonal y una matriz triangular superior. Si se
multiplica a la inversa, la matriz resultante sigue teniendo los mismos valores
propios e iterando se puede llegar a una matriz que los contenga en la
diagonal.

Descripcin del algoritmo


Formalmente, sea A una matriz real de la que queremos calcular los valores propios, se
asigna A0:=A. En adelante se calculan las siguientes iteraciones de forma:

Ak=QkRk dondeQk es una matriz ortogonal y Rk es una matriz triangular superior.

Ak+1 = RkQk. Se ha de notar que

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.

Variantes del algoritmo

Reduccin del coste computacional


En la forma ms simple, este algoritmo es muy costoso computacionalmente. Se puede
mitigar esto convirtiendo A en unamatriz de Hessenberg, lo que ocupa
operaciones aritmticas usando la transformacin de Householder34 Determinar la
descomposicin QR de una matriz de Hessenberg lleva

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, usando una tcnica basada en la reduccin de

Householder.3 4 Determinar la descomposicin QR de una matriz simtrica tridiagonal


cuesta

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.

El algortimo LR fue desarrollado en los comienzos de la dcada de 1950 por Heinz


Rutishauer, que trabajaba como asistente de Eduard Stiefel en la Escuela Politcnica Federal
de Zrich. Stiefel sugiri que Rutishauer usara la secuencia de momentos y0T Ak x0, k = 0, 1,
(donde x0 e y0 son vectores arbitrarios) para encontrar los valores propios de A. Rutishauer
us un algoritmo de Alexander Aitken para esta tarea y lo desarroll en un algoritmo de
cociente-diferencia(quotientdifference algorithm), de donde deriva el trmino algoritmo qd.
Tras formularlo de una forma apropiada computacionalmente, descubri que el algortimo era
en realidad la iteracin Ak =LkUk (Descomposicin LU), Ak+1 = UkLk, aplicado sobre una matriz
tridiagonal de la que deriva el algoritmo LR.7

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

% sali cero! La matriz A es de rango deficiente


r= zeros(1, m); % este va a ser el vector que reemplazar a la

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)

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