You are on page 1of 2

1

ETSII-UPM
Factorizacin Directa de Matrices
Mtodos de Crout y Choleski
Matemticas de la Especialidad (Mecnica-Mquinas)
Madrid, 21 de octubre de 2002
Javier Garca de Jaln
ETSII - Departamento de Matemtica Aplicada
a la Ingeniera Industrial
ETSII-UPM
Factorizacin directa de Crout
q Para una matriz cuadrada de rango r=n la eliminacin de Gauss llega
al siguiente resultado:
q A este mismo resultado se puede llegar por identificacin directa
A partir de la primera fila de A
A partir de la primera columna de A
A partir de la segunda fila de A
A partir de la segunda columna de A
11 12 13 14 11 12 13 14
21 22 23 24 21 22 23 24
31 32 33 34 31 32 33 34
41 42 43 44 41 42 43 44
1 0 0 0
1 0 0 0
;
1 0 0 0
1 0 0 0
a a a a u u u u
a a a a l u u u
a a a a l l u u
a a a a l l l u
1 1 1
1 1 1
1 1 1

1 1 1
1 1 1
1 1 1 ] ] ]
A LU
1 1
1,2,...,
j j
u a j n
1 1 11 1 1 11
; = / 2,3,...
j j j j
a l u l a u j n
1 2 1
2 21 1 2 2 2 21 1 2
11
1 ; 2,...,
j
j j j j j j j
u u
a l u u u a l u a j n
u
+
( ) 2 1 1 2 2 2 2 2 2 1 1 2
22
1
; 3,...,
j j j j j j
a l u l u l a l u j n
u
+
ETSII-UPM
Factorizacin directa de Crout (2)
q Para la tercera fila y columna de A
Elemento de la diagonal
Resto de los elementos de la 3 fila
Elementos de la 3 columna
q Para el ltimo elemento de la diagonal
11 12 13 14 11 12 13 14
21 22 23 24 21 22 23 24
31 32 33 34 31 32 33 34
41 42 43 44 41 42 43 44
1 0 0 0
1 0 0 0
;
1 0 0 0
1 0 0 0
a a a a u u u u
a a a a l u u u
a a a a l l u u
a a a a l l l u
1 1 1
1 1 1
1 1 1

1 1 1
1 1 1
1 1 1 ] ] ]
A LU
33 31 13 32 23 33 33 33 31 13 32 23
1 a l u l u u u a l u l u + +
34 31 14 32 24 34 34 34 3 1 1 4 32 24
a l u l u u u a l u l u + +
( ) 43 4 1 1 3 4 2 2 3 4 3 3 3 43 43 4 1 1 3 4 2 2 3
33
1
a l u l u l u l a l u l u
u
+ +
44 4 1 1 4 42 24 43 34 44 44 44 41 14 42 24 43 34
1 a l u l u l u u u a l u l u l u + + +
ETSII-UPM
Factorizacin directa de Crout (3)
q Frmulas generales para la factorizacin de Crout: A=LU
q Las zonas rayadas en Ly Uson las zonas ya calculadas
A partir de a
ii
se calcula el elemento de la diagonal u
ii
A partir de a
ij
(j=i+1, , n) se calculan los elementos de la fila i de U
A partir de a
ji
(j=i+1, , n) se calculan los elementos de la columna i de L
1 1
1 1

i i
ii i k k i i i ii i i ik ki
k k
a l u u u a l u


+

1 1
1 1
1,...,
i i
ij i k k j ij i j ij i k k j
k k
a l u u u a l u j i n


+ +

=
1 1
1 1
1
1,...,
i i
ji jk ki ji i i j i ji j k ki
k k ii
a l u l u l a l u j i n
u


_
+ +

,

ETSII-UPM
Crout para matrices simtricas
q Si la matriz Aes simtrica las expresiones de l
ij
y de u
ji
coinciden,
excepto en que los elementos l
ij
estn divididos por los u
ii
q Se puede escribir entonces
q Hay dos posibilidades para almacenar el resultado:
Almacenar U en su posicin habitual incluyendo su diagonal, lo que permite
recuperar L fcilmente
Almacenar D en la diagonal de la matriz resultado y L
T
en la mitad superior.
En este caso, las filas de U se guardan ya divididas por el elemento de la
diagonal
q Los clculos pueden hacerse por filas y por columnas. En las
siguientes transparencias se desarrollar con detalle el caso de filas
T
A LU LDL
ETSII-UPM
Crout para matrices simtricas (2)
q Clculo por filas
La parte rayada est ya calculada
El clculo de los elementos de la fila i recuerda al producto escalar de la
columna i por la columna j, excepto que cada sumando est dividido por el
elemento de la diagonal. Estas divisiones restan eficiencia a los clculos
El algoritmo puede modificarse para resolver esta dificultad,
al mismo tiempo que se vectoriza.
2 1 1 1
1 1 1
i i i
ki ki
ii ii ik ki ii ki ii
k k k kk kk
u u
d a l u a u a
u u




1 1
1 1
( )/ ( ) /
1,...,
i i
T T T
ij i j ik kj i i ij k i k j kk i i
k k
l a l u d a l l d d
j i n



+

i j
1 1
1 1
1,...,
i i
ki kj
ij i j ik kj i j
k k kk
u u
u a l u a
u
j i n



+

2
ETSII-UPM
Algoritmo de Crout
q El algoritmo de Crout, almacenando D y L
T
, puede ser como se
muestra a continuacin:
% primera fila de L'
for j=2:n
A(1,j)=A(1,j)/A(1,1);
end
for i=2:n
% se forma el vector auxiliar
for k=1:i-1;
v(k)=A(k,i)*A(k,k);
end
% clculo del elemento diagonal
for k=1:i-1
A(i,i)=A(i,i)-v(k)*A(k,i);
end
% clculo del resto de la fila i
for j=i+1:n
for k=1:i-1
A(i,j)=A(i,j)-v(k)*A(k,j);
end
A(i,j)=A(i,j)/A(i,i);
end
end
i j
1 1 1
1 1 1
i i i
T T T
ii i i i k ki i i k i k i ii i i ki k
k k k
d a l u a l l d a l v




1
1
1
1
( )/
( ) / 1,...,
i
T
ij ij ik kj ii
k
i
T
ij ki k ii
k
l a l u d
a l v d j i n

ETSII-UPM
Algoritmo de Crout Vectorizado
q El resultado contendr la matriz D y la matriz L
T
q En los estados intermedios (antes de operar sobre la fila i):
Parte de los elementos son L
T
(ya definitivos, rayado a 45) y
Parte son A (los no modificados todava, rayado discontinuo)
q El paso i realiza las siguientes tareas:
Calcula un vector auxiliar v (columna i
de L
T
multiplicada por diagonal)
Calcula el valor definitivo de d
ii
Pasa de A a L
T
la fila i
q Expresiones
1 1 1
1 1 1
1,2,..., -1
T
j ji jj
i i i
T T T
ii ii ik ki ii k i k i kk ii kki
k k k
v l d j i
d a l u a l l d a v l





1 1 1
1 1 1
( ) / ( ) / ( ) / 1,...,
i i i
T T T T T
ij ij ki kj ii ij k i k j kk ii ij k k j ii
k k k
l a l u d a l l d d a v l d j i n


+

i j
ETSII-UPM
Algoritmo de Crout Vectorizado (2)
q El programa de factorizacin puede ser como sigue (dos bucles for):
i j
% se guardan D y L' (A=L*D*L')
v=zeros(n,1);
d=zeros(n,1); d(1)=A(1,1);
% se divide la fila 1 por A(1,1)
A(1,2:n)=A(1,2:n)/A(1,1);
for i=2:n
% vector auxiliar
v(1:i-1)=A(1:i-1,i).*d(1:i-1);
% elemento diagonal fila i
dii=A(i,i);
dii=dii-v(1:i-1)'*A(1:i-1,i);
d(i)=dii;
A(i,i)=dii;
% clculo del resto de la fila i
for j=i+1:n
A(i,j)=(A(i,j)-v(1:i-1)'*A(1:i-1,j))/dii;
end
end
ETSII-UPM
Algoritmo de Crout Vectorizado (3)
q El siguiente programa de Matlab calcula la factorizacin de Crout
utilizando doble vectorizacin (un solo bucle for)
% se guardan D y L' (A=L*D*L')
v=zeros(n,1);
d=zeros(n,1); d(1)=A(1,1);
% primera fila de L'
A(1,2:n)=A(1,2:n)/A(1,1);
% restantes filas
for i=2:n
% vector auxiliar: columna i dividida diagonal
v(1:i-1)=A(1:i-1,i).*d(1:i-1);
% elemento de la diagonal
dii=A(i,i);
dii=dii-v(1:i-1)'*A(1:i-1,i);
A(i,i)=dii;
d(i)=dii;
% resto de la fila i
A(i,i+1:n)=(A(i,i+1:n)-v(1:i-1)'*A(1:i-1,i+1:n))/dii;
end
ETSII-UPM
Factorizacin de Choleski
q Se aplica a matrices simtricas y definidas-positivas, pues hace falta
que est garantizado el que todos los pivots sean positivos
q Expresiones (se va a trabajar con Ly con la parte inferior de A):
Elemento de la diagonal
Elementos de la columna i
=
0
0
1/2 1/2



T
T
T

A=LU
LDL
LD D L
LL
1
1 1 2
2 2 2
1 1 1

i i i
T
ii ik k i ik ii ii ii i k
k k k
a l l l l l a l


_
+

,

1 1
1 1 1
1

i i i
T
ji jk k i jk i k j i i i ji ji jk i k
k k k ii
a l l l l l l l a l l
l


_
+

,

ETSII-UPM
Resultados numricos con Matlab
q A continuacin se dan algunos resultados de tiempos con Matlab
(Pentium III, 800 Mhz )
GaussElimSim1 (n=400) 124.78 s (sin vectorizar)
GaussElimSim2 (n=400) 7.12 s (vectorizacin simple)
GaussElimSim3 (n=400) 7.62 s (vectorizacin doble)
CroutMod1 (n=400) 136.88 s (sin vectorizar)
CroutMod2 (n=400) 5.287 s (vectorizacin simple)
CroutMod3 (n=400) 1.042 s (vectorizacin doble)
Con la funcin lu() de Matlab: 0.821 s
q Comparacin entre Crout y la eliminacin de Gauss
La factorizacin de Crout conduce al mismo resultado que la eliminacin de
Gauss y realiza el mismo n de operaciones aritmticas, pero es ms eficiente
en el manejo de los accesos de la CPU a la memoria del ordenador, pues cada
elemento de A sufre en un solo paso todas las transformaciones