Descomposición LU de matrices

Anuncio
Descomposición LU de matrices
José L. Vieitez
IMERL, Facultad de Ingenierı́a,
Universidad de la República
23 de agosto de 2006
Abstract
Descomposición LU de una matriz A = (aij ), i, j = 1, . . . , n.
1
Hechos básicos
Para escalerizar la matriz A = ((ai,j )), n × n, por el método de Gauss se usan 3
operaciones elementales:
1. Intercambio de las filas i y j, Ai con Aj :
equivale a multiplicar a la izquierda la matriz A por la matriz n × n, Pi,j ,
obtenida de la identidad In intercambiando las filas i y j.
2. Multiplicación de la fila Ai por el número k 6= 0:
equivale a multiplicar a la izquierda la matriz A por la matriz n × n, In +
(k − 1)Ei,i , donde Ei,j denota la matriz que tiene todas las entradas nulas
menos la (i, j) que vale 1.
3. Suma a la fila Aj de la fila Ai , i 6= j, multiplicada por el número λ:
equivale a multiplicar a la izquierda la matriz A por la matriz n×n, In +λEj,i .
Observación 1.0.1. Si se hace la multiplicación a derecha por la matriz correspondiente se intercambian las columnas, se multiplica una columna por un número o
se suma a una columna un múltiplo de otra.
En el proceso de escalerización puede no ser preciso cambiar filas de lugar, pero si
fuera necesario hacerlo, una observación importante es que se puede suponer que
el intercambio se ha realizado todo al comienzo de la escalerización. Esto es ası́
porque en el Método de Escalerización de Gauss el intercambio de filas se hace en
1
el momento de elegir un pivot. Si denotamos por A(h) a la matriz obtenida tras h
pasos de escalerización, y esa matriz es de la forma:


b1,1 b1,2
···
···
b1,n
 0
b2,2
···
···
b2,n 


 0
0
b3,3 · · · · · ·
b3,n 


 ··· ···
···
···
··· 


(h)
A =  0 0···
· · · bj,j
···
bj,n 


 0 0··· ···b

·
·
·
b
j+1,j
j+1,n


 .

..
..
..
..
 ..

.
.
.
.
0 0···
· · · bn,j · · ·
bn,n
Entonces el pivoteo (parcial) implica la búsqueda de un elemento bt,j , t = j, . . . , n,
no nulo y de módulo máximo para disminuir los errores numéricos que se introducen
en las operaciones (si no se tiene en cuenta esto, casi que lo único que interesa es
que bt,j 6= 0). Pero esto afecta solo a las filas que en ese momento ocupan
los lugares entre j y n. Por tanto aquellas filas que ya fueron pivot no aparecen
en posibles intercambios: si intercambio al comienzo la fila 1 con la 4 y luego la
fila 3 con la 4 (que era la vieja fila 1), equivale a hacer de una vez: la fila 1 al lugar
de la fila 3, la fila 3 a la fila 4 y la fila 4 a la fila 1. Se puede entonces suponer que
al comienzo un ”gnomo” u oráculo nos dijo cómo convenı́a intercambiar las filas y
hacerlo desde el comienzo.
Si hacemos esto, en lugar de escalerizar A escalerizamos P A donde P es una matriz que intercambia las filas de A (una matriz de permutación). la matriz P es
simplemente la que se obtiene de la identidad In aplicándole esa permutación a las
filas.
2
Descomposición LU sin intercambio de filas
Supongamos entonces por el momento que no precisamos alterar el orden entre
las filas de A y que el rango de A es n (o sea, A es no singular). Observamos lo
siguiente:
al comienzo de la escalerización a cada fila A2 , . . . , An le sumamos la primera fila
A1 multiplicada por −l2,1 , . . . , −ln,1 respectivamente, donde lj,1 = aj,1 /a1,1 .
2
Denotando por L−1
j,1 a la matriz

L−1
j,1





=





0
···
0
0
···
0 

···
··· ··· 

···1 0··· 0 

···
··· ··· 

..
..
.. 
.
.
. 
··· ···0 1
1
0
0
1
··· ···
−lj1 0
0
···
..
..
.
.
0
···
se ve fácilmente que su inversa Lj,1 se obtiene simplemente cambiando el signo de
la entrada (j, 1) (¡multiplique ambas matrices!):


1
0
0
···
0
 0
1
0
···
0 


 ··· ··· ···
·
·
·
·
·· 


 lj1 0 · · · 1 0 · · · 0 
Lj,1 = 

 0 ··· ···
··· ··· 


 .
..
..
..
.. 
 ..
.
.
.
. 
0
···
···
···0
1
La matriz A(1) que tiene todas las entradas en la primera columna iguales a 0,
excepto la entrada (1, 1) que vale a1,1 , se escribe:
−1
−1 −1
(1)
L−1
n,1 Ln−1,1 · · · L3,1 L2,1 A = A
o equivalentemente
A = L2,1 L3,1 · · · Ln−1,1 Ln,1 A(1) .
Repitiendo el proceso de escalerización con A(1) obtenemos una matriz A(2) que
tiene nulas todos las entradas de la segunda columna (excepto la entrada (2, 2)).
Con la adopción obvia de notación queda:
−1 −1 −1
−1 −1
(2)
L−1
n,2 · · · L4,2 L3,2 Ln,1 · · · L3,1 L2,1 A = A
o equivalentemente
A = L2,1 L3,1 · · · Ln,1 L3,2 L4,2 · · · Ln,2 A(2) .
Aquı́ la matriz Li,j , i 6= j, se obtiene sumándole a la matriz identidad In la matriz
n × n que tiene todas sus entradas nulas excepto la que ocupa el lugar (i, j) que
vale li,j .
3
Continuando con el proceso de escalerización mientras sea posible se obtiene
al final una matriz A(n) = U triangular superior (pues A es de rango máximo por
hipótesis) tal que A se va a escribir
A = L2,1 L3,1 · · · Ln,1 L3,2 · · · Ln,2 · · · Ln−1,n−2 Ln,n−2 Ln,n−1 U .
Afirmamos que:
1. el producto
L2,1 L3,1 · · · Ln,1 L3,2 · · · Ln,2 · · · Ln−1,n−2 Ln,n−2 Ln,n−1
es una matriz triangular inferior. Esto es obvio pues todas las matrices Li,j
son triangulares inferiores y el producto de dos matrices triangulares inferiores
es una matriz triangular inferior.
2. L2,1 L3,1 · · · Ln,1 es la matriz







L1 = 





1
l2,1
l3,1
···
lj1
···
..
.
0
1
0
···
0
···
..
.
0
0
1
···
···
···
..
.
···
···
0···
···
1···
···
..
.
0
0
0
···
0
···
..
.
ln,1
0
···
···0
1













Del mismo modo
L3,2 L4,2 · · · Ln,2
da la matriz







L2 = 





1
0
0
···
0
···
..
.
0
0
1
l3,2
···
lj,2
···
..
.
0
0
1
···
0···
···
..
.
···
···
0···
···
1···
···
..
.
0
0
0
···
0
···
..
.
ln,2
···
···0
1
Y en general
Li+1,i Li+2,i · · · Ln,i
4













da la matriz Li que tiene sus entradas sobre la diagonal principal iguales a 1,
cada entrada (j, i) de la columna i por debajo de la diagonal (j > i) igual a
lj,i , y el resto de las entradas iguales a 0.
3. Finalmente el producto L1 L2

1
 l2,1

 l3,1

 ···

 lj,1

 ···

 .
 ..
da la matriz con entradas

0
0
···
0
1
0
···
0 

l3,2
1
0··· 0 

··· ···
··· ··· 

lj,2 0 · · · 1 · · · 0 

··· ···
··· ··· 

.. 
..
..
..
.
. 
.
.
ln,1 ln,2 0 · · ·
···0
1
Para ver esto observar que multiplicar L2 por L1 a la izquierda equivale a
sumarle a la segunda fila de L2 la primera (que es (1, 0, . . . , 0)) multiplicada
por l2,1 , a la tercera fila de L2 la primera multiplicada por l3,1 , etc.
4. Haciendo primero Ln−2 Ln−1 , al resultado multiplicándolo a a izquierda por
Ln−3 y ası́ hasta llegar a L1 se puede ver, con argumentos similares a los ya
expuestos, que la matriz L obtenida de este modo es simplemente


1
0
0
···
0
 l2,1 1
0
···
0 


 l3,1 l3,2
1
0···
0 


 ··· ···
···
···
··· 


L= l
1···
0 
 j,1 lj,2 lj,3 · · ·

 ··· ···

·
·
·
·
·
·
·
·
·


 .
..
..
..
.. 
 ..
.
.
.
. 
ln,1 ln,2
···
· · · ln,n−1 1
donde los coeficientes lj,i son los que se obtienen al aplicar el método de
escalerización de Gauss.
Se concluye que A = LU donde L es triangular inferior con los elementos de la
diagonal principal iguales a 1 y los coeficientes lj,i obtenidos como se ilustra más
arriba y U es la matriz que se obtiene de A luego de la escalerización.
Además las matrices L, U tales que A = LU son únicas (con L con unos en la
diagonal principal) pues si LU = A = L0 U 0 entonces L0−1 L = U 0 U −1 . Pero U y
U 0 son matrices triangulares superiores por lo que U −1 es triangular superior y el
5
producto U 0 U −1 es triangular superior. Análogamente L0−1 L es triangular inferior.
Se concluye de la igualdad que todos los elementos de L0−1 L = U 0 U −1 que no estén
en la diagonal principal son nulos. Pero como los de la diagonal principal de L y
L0 son unos finalmente queda que L0−1 L = U 0 U −1 = In . O sea, L = L0 y U = U 0 .
3
Descomposición LU en el caso general
Finalmente observemos que en el caso general no va a ser posible realizar la descomposición LU de la matriz A sin permutar las filas de A, en ese caso realizamos
la descomposición LU de P A donde P es la matriz de permutación que intercambia las filas de A de modo que se pueda escalerizar P A sin pivoteo. Va a quedar
P A = LU .
Observación 3.0.2. Por otro lado, si el rango de A es menor que n (A es una
matriz singular) en el proceso de escalerización de Gauss nos damos cuenta ya que
encontraremos en algún paso j de la escalerización, j = 1, . . . , n − 1, que todas las
filas Fk k = j + 1, . . . , n tienen elementos ak,j+1 = 0.
Más aun, para las filas Fk luego del paso j de escalerización con k = j +1, . . . , n
consideremos el máximo mk de todos los elementos |ak,h | con h = j + 1, . . . , n. Entonces en aritmética de punto flotante debemos cuidar que el valor normalizado
de |ak,j+1 |/mk no sea tan chico que introduzca tales errores en el cálculo que
hagan imposible continuar. Esto depende de la precisión usada. Estarı́amos, si
ak,j+1 /mk ≈ 0 para todo k = j + 1, . . . , n, frente a un caso en que la matriz es
casi singular. En ese caso un programa que realice la escalerización (o la descomposición LU) debe detenerse avisando que la matriz A es casi singular.
Pero habı́amos supuesto que un oráculo nos decı́a qué filas debı́amos intercambiar, ¿cómo hacer si el ”gnomo” que nos sopla al principio el intercambio de filas
no aparece? O sea, a priori no sé que intercambios de filas debo hacer. No serı́a
muy económico tener que escalerizar una vez la matriz y volver a repetir todo de
vuelta.
Supongamos entonces que no tenemos al oráculo y que descubrimos luego de h
pasos de escalerización aplicados directamente a A, que en la matriz A(h) obtenida
es necesario intercambiar la fila i, Fi , con la j, Fj , siendo j > i > h. Eso equivale
a multiplicar a izquierda la matriz A(h) por la matriz Pij que se obtiene a partir
de la identidad In cambiando en esta última la fila i con la j. Ejemplo: si quiero
6
intercambiar la fila 1 con la 2 multiplico a izquierda por la matriz P12


0
1
0
···
0
 1
0
0
···
0 


0
1
0
··· 
P12 = 
 0

 ··· ··· ··· ··· ··· 
0 ··· ··· ···0 1
El intercambio de la fila i con la j se representa por la ecuación matricial Pij L−1
(h) A =
Pij A(h) donde en Lh−1 hemos incluido el producto de todas las transformaciones elementales aplicadas a A para obtener A(h) . Obsérvese que la matriz L−1
(h) restringida
−1
−1
= 0 si h 6= k, lkk
= 1. Esta observación
a las columnas k ≥ i tiene entradas lhk
−1
0−1
permite probar que Pij L(h) es lo mismo que L(h) Pij donde L0−1
(h) es la matriz que
se obtiene de L−1
(h) intercambiando la fila i con la fila j pero dejando la entrada
1 en la diagonal principal sin mover.
Ejemplo: supongamos que A es 4 × 4 y que van dos pasos de la escalerización y
allı́ vemos que es preciso intercambiar la fila 3 con la 4. Esto se escribirı́a : P34 L−1
2 A
 


1 0 0 0
1
0
0 0
 0 1 0 0   −l21
1
0 0 
 


 0 0 0 1  ×  −l31 −l32 1 0  × A
0 0 1 0
−l41 −l42 0 1
que es lo mismo que

1
0
 −l21
1

 −l41 −l42
−l31 −l32
0
0
1
0
 
0
1
 0
0 
×
0   0
1
0
0
1
0
0
0
0
0
1

0
0 
×A
1 
0
Resulta entonces que no perdemos nada al ir realizando los intercambios de fila en
el momento en que lo precisamos.
Esto sugiere entonces que realicemos el siguiente
Algoritmo para hallar la descomposición LU de P A.
Entrada: A = ((aij )) matriz n × n de rango n.
Salida: L, U P matrices n × n que realizan la igualdad LU = P A.
1. ) Hacer P la matriz identidad n × n, hacer L la matriz identidad n × n.
(Valores iniciales de P y L).
7
2. ) Para i variando entre 1 y n hacer:
3. ) Si aii = 0 buscar el primer j > i tal que aij 6= 0. Intercambiar en P la fila
i con la fila j, intercambiar en A la fila i con la j, intercambiar en L la fila
i con la j, para la matriz L dejar incambiada la diagonal principal
(donde la entrada es 1).
4. ) Para j > i hasta que j = n, hacer
lji =
aji
.
aii
Cambiar la fila Fj de A por Fj − lji Fi . Insertar en la entrada (j, i) de L el
valor lji .
5. ) Tomar como nuevas matrices A, P y L a las obtenidas con las transformaciones anteriores. (Ver nota al pie del algoritmo).
6. ) Volver al paso 2. ) incrementando en 1 el valor de i. (repetir todo de nuevo
hasta que i = n).
7. ) Al finalizar tenemos como último valor de A a la matriz U , y las correspondientes P y L.
Nota: Los elementos aij a los que refiere el algoritmo anterior NO son los originales
de A, sino los que se obtienen al ir aplicando los sucesivos pasos. Ası́ seguimos
llamando A a la matriz que se va obteniendo luego de varias etapas de escalerización
como es usual en programación. Es lo que anteriormente llamamos A(h) . Análogas
consideraciones valen para L y P .
Si este algoritmo se realiza con un dispositivo electrónico (un computador) y
se deseara guardar el valor original de A habrı́a que almacenarlo aparte (tomar un
duplicado) ya que al final del algoritmo el valor modificado de A es la matriz U .
Más aun, los lugares que van a ser 0 pueden almacenar los valores de L excepto los
de la diagonal principal, pero estos no se precisan almacenar ya que lii = 1 para
todo i = 1, . . . , n donde (lij ) = L.
Para resolver el sistema Ax = b lo hacemos resolviendo P Ax = P b, o sea,
LU x = P b. En la práctica tampoco se precisa construir la matriz P . Alcanza
con llevar control de las filas que intercambiamos en la escalerización o que puede
hacerse con un vector de orden ord que al principio se inicializa como ord(k) = k
para todo k = 1, . . . , n. Al intercambiar la fila i con la j simplemente llevamos
cuenta de ello haciendo ord(i) = j, ord(j) = i. Al resolver Ax = b, usando la
8
descomposición LU, realizamos los mismos intercambios entre las filas de la matriz
columna b. La información de estos cambios están almacenados en ord.
4
Ejemplos de bolsillo.
Si A es una matriz 2 × 2
µ
A=
a11 a12
a21 a22
entonces si a11 6= 0 calculamos
l21 =
¶
a21
a11
y la matriz L queda simplemente
µ
L=
1
l21
0
1
¶
La matriz U es la que resulta de la escalerización que en este caso queda
µ
¶
a11 a12
U=
0 a022
donde
a022 = a22 − l21 a12 = a22 −
a21
a12 .
a11
Si fuera preciso permutar las filas de A (esto es imprescindible si a11 = 0, pero
en la práctica debe hacerse también si a11 normalizado es casi nulo, a11 /m1 ≈ 0)
entonces escalerizarı́amos la matriz P A
¶
µ
a21 a22
PA =
a11 a12
donde P es la matriz elemental que realiza el intercambio de la primera y segunda
fila de A al multiplicar A a la izquierda por P
µ
¶
0 1
P =
.
1 0
Si A es una matriz 3 × 3


a11 a12 a13
A =  a21 a22 a23 
a31 a32 a33
9
entonces, si a11 6= 0, l21 y l31 se calculan simplemente como
l21 =
a21
,
a11
l31 =
a31
a11
la matriz A luego de escalerizada para anular las entradas (2, 1) y (3, 1) - lo que
se logra cambiando la fila 2, A2 , por la fila 2 menos la fila 1 multiplicada por l21 ,
A2 − l21 A1 y cambiando la fila 3, A3 , por la fila 3 menos la fila 1 multiplicada por
l31 , A3 − l31 A1 - queda


a11 a12 a13
A(1) =  0 a022 a023 
0 a032 a033
donde a022 = a22 −l21 a12 , a0 23 = a23 −l21 a13 , a0 32 = a32 −l31 a12 y a033 = a33 −l31 a13 .
Finalmente, si a022 6= 0 calculamos
a032
a022
l32 =
y escalerizmos restando a la tercera fila de A(1) la segunda. Obtenemos la matriz
U


a11 a12 a13
U =  0 a022 a023 
0
0 a0033
donde a0033 = a033 − l32 a023 . La matriz L va

1
L =  l21
l31
a ser simplemente

0 0
1 0 
l32 1
En general para obtener L se van almacenando en los lugares (j, i) los coeficientes lji , j > i, que aparecen en el método de escalerización de Gauss, siendo
(h)
lji =
aji
(h)
aii
(h)
el factor necesario para que al sustituir la fila Aj
(h)
por Aj
(h)
− lji Ai
se
anule la entrada (j, i) (aquı́ A(h) representa la matriz obtenida luego de h pasos
de escalerización). La entradas en la diagonal principal de L son el número 1 y el
resto de las entradas (las que están por encima de la diagonal principal) son nulas.
La matriz U va a ser la que se obtiene al finalizar la escalerización de A. Otra
vez, si es preciso intercambiar filas en A en realidad vamos a estar haciendo la
10
descomposición LU de P A y al resolver Ax = b lo haremos hallando la solución de
LU x = P b.
Ejemplos numéricos


2 1
1
A =  1 1 −2 
0 −1 4
Aquı́ l21 = 12 . Restando a la segunda fila la primera multiplicada por l21 =
como nueva segunda fila
1
5
− ).
(0
2
2
Como la entrada (3, 1) es nula l31 = 0. La matriz obtenida es


2 1
1
A(1) =  0 12 − 52 
0 −1 4
El coeficiente l32 vale
l32 =
−1
1
2
1
2
queda
= −2
Sustituyendo en A(1) la tercera fila por la tercera fila menos la segunda multiplicada
por l32 obtenemos la matriz U


2 1 1
U =  0 12 − 52 
0 0 −1
La matriz L queda


0 0
L =  12 1 0  .
0 −2 1
1
Si ahora A fuera la matriz


0 −1 4
1 
A= 2 1
1 1 −2
como en este caso a11 = 0 debo intercambiar la fila 1 con otra. Es claro que si
intercambio primero la fila 1 con la fila 3 y luego la fila 1 con la fila 2 caigo en el
ejemplo ya visto (esto es algo artificioso, normalmente uno harı́a un intercambio
11
sólo, por ejemplo la primera fila con la segunda, lo hacemos para aprovechar lo ya
hecho). La matriz P en ese caso serı́a


0 1 0
P = 0 0 1 
1 0 0
Si quiero resolver Ax = b con

3
b= 5 
−1

En este caso, como ya dijimos, aplicando LU debo intercambiar las filas de b según
la matriz P resolviendo LU x = P b. En este caso P b es


5
b =  −1  .
3
La descomposición LU se usa cuando hay que resolver el sistema Ax = b para
varios b distintos. En el fondo puede verse como un modo de aprovechar la información que se obtiene al escalerizar A de modo de re-usarla otras veces. Puede
usarse para calcular la inversa de A, A−1 , ya que en este caso se debe resolver
Ax = ej para j = 1, . . . , n con ej la matriz columna (vector) que tiene todas sus
entradas nulas excepto la de la fila j que vale 1.
Observación 4.0.3. Dado que det(P A) = det(L) det(U ) resulta, puesto que L y
U son matrices triangulares y lii = 1 ∀ i = 1, . . . , n, que
det(P A) = det(U ) =
n
Y
uii
i=1
donde U = (uij ). Si nos interesa calcular el valor de det(A) debemos saber el de
det(P ) ya que det(P A) = det(P ) det(A). Esto puede hacerse en la descomposición
LU simplemente definiendo una variable detP que se inicializa en 1 y que se multiplica por −1 cada vez que se intercambia una fila por otra en la escalerización de
A. O sea, hacemos detP := −detP cada vez que se intercambian filas. Al finalizar
tenemos el valor de detP que será 1 ó −1 de donde resulta
det(A) = detP · det(U ) = detP ·
n
Y
i=1
12
uii .
Descargar