Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.5 La Factorizacin QR
Dada una matriz cuadrada y nosingular A de orden n x n, entonces existe una
matriz ortogonal Q y una matriz triangular superior R tal que
A=QR
esta es llamada la factorizacin QR de A.
Si la matriz A no es cuadrada y de orden m x n con m mayor que n entonces:
R1
A QR O
uu'
u'u
es llamada una matriz Householder, donde I es la matriz identidad y u es un vector no
nulo.
Propiedades de la matriz H:
a) ||Hx||2=||x||2 para todo vector x. Es decir, la matriz Householder no
cambia la longitud del vector.
b) H es una matriz orthogonal.
2
c) H = I
d) Det(H)=-1.
La importancia de las matrices Householder es que ellas pueden ser usadas para crear
ceros en un vector y por lo tanto pueden dar lugar a matrices triangulares.
Consideremos el vector elemental e1=(1,0, ,0) . Entonces para todo vector no nulo
xe1 existe siempre una matriz Householder H tal que Hx es un mltiplo de e1.
u1=u1+
=-m*
la siguiente funcin housecero en MATLAB ejecuta el algoritmo
function [u,sigma] = housecero(x)
%HOUSECERO Crea ceros en un vector usando una matriz Householder.
%[u,sigma] = housecero(x) produce un vector u
%que define una matriz Householder H, y una constante sigma
%tal que Hx = [sigma, 0, ...., 0]'.
%input : vector x
%output : vector u, y constante sigma
[m,n] = size(x);
mm =
max(abs(x)); x =
x/mm;
s = sign(x(1));
if s == 0
s = 1;
end;
sigma = s * norm(x,2);
u = x + sigma * eye(m,1);
sigma = -mm * sigma;
9
addpath c:\matlab\acuna
[u,sigma]=housecero(x)
u=
1.4773
0.4444
1.0000
sigma =
-10.2956
u1=2*u*u'/(u'*u) u1
=
1.2914
0.3885
0.8742
0.3885
0.1169
0.2630
0.8742
0.2630
0.5917
% matriz Householder
H=eye(3)-u1 H =
0.0000
0
1.0000
Paso 3. Modificar =s
Paso 4. For i=1, , n do
xi=xi-ui
Consideremos ahora una matriz A, entonces HA=A-uuA. Luego, la entrada (i,j) de
m
H1A=
....
....
* ....
*
..... ..... ....
*
*
*
a n1 0
(1)
Paso 2: Construir una matriz Householder H2 tal que H2A tenga zeros debajo de
la entrada (2,2) en la segunda columna y que los ceros que ya se crearon en la
(1)
primera columna de matriz A no cambien. Es decir,
*
0
(2)
(1)
A =H2A = 0
*
*
0
.. ...
.
0 0
*
*
*
...
*
...
...
...
...
...
*
*
...
*
H2 puede ser construido como sigue: primero construir una matriz Householder
'
~
n1 '
n1
H 2 n1 2 u n1 / n1u ) de orden n-1 tal que
u
a 22
*
0
...
a32
~
...
H2
...
a
n2
...
0
y luego definir,
1 0 ... 0
0
H 2
~
...
H2
(2)
Superponer A por A .
(k-1)
kk
*
0
a
kk 1
~
...
H
k
...
akn
...
y luego definir,
I k 1 0
H 2
~
0 H k
(k)
(k-1)
Calcular A =HkA
(k)
. Superponer A por A .
(n-1)
(n-1)
=Hn-1A
(n-2)
(n-3)
=Hn-1Hn-2A
Q=Hn-1Hn-2 .H2H1
= .=Hn-1Hn-2 H2H1A
o
ak 1k 0
~
... ...
Hk
...
a
nk
...
0
(Usar housecero)
Paso 2. Superponer akk por
Paso 3. Almacenar el vector un-k+1 como sigue:
aikuik, I=k+1, ..,n
vkukk
'
Paso 5. Modificar las entradas de la submatriz A que contiene las filas k hasta n y las
columnas k+1 hasta n.
For j=k+1, .n do
n
1.
s= u ik aij
ik
2 5
A=
6 7
9 5
2
7
B=
4
5 1
Solucin:
addpath c:\matlab\acuna
A=[4 2 5;8 6 7;1 9 5]
A =
4
8
1
2
6
9
5
7
5
[q,r]=houseqr(A)
q =
-0.4444
-0.8889
-0.1111
0.1458
0.0506
-0.9880
0.8839
-0.4553
0.1071
-7.2222
-8.2970
0
-9.0000
-3.8568
1.7677
r =
-9.0000
0
0
5
2
7
-1
7
2
0
4
[q,r]=houseqr(B)
q =
-0.5601
-0.4201
-0.1400
-0.7001
0.3515
0.0442
0.8087
-0.4695
0.7499
-0.3577
-0.4749
-0.2903
-3.9208
7.9767
0
0
-7.5615
0.6711
3.3724
0
r =
-7.1414
0
0
0
-0.0208
-0.8329
0.3175
0.4529