Está en la página 1de 9

Capı́tulo 2

Resolución de sistemas
lineales
5 Básico
2.1 Introducción
La mayor parte de este escrito trata sobre la forma en que las ecuaciones de
campo son aproximadas por sistemas de ecuaciones algebraicas. Estos sistemas
son muy a menudo sistemas lineales. Cuando no son sistemas lineales, su reso-
lución suele requerir la de varios sistemas lineales. Por todo ello, las técnicas
numéricas de resolución de estos sistemas son de una importancia crucial.
El tratamiento sistemático de estos procedimientos hace muy conveniente,
de hecho casi imprescindible, el que estos sistemas lineales se planteen de forma
matricial. Ası́ pues, se puede reescribir el párrafo anterior diciendo que este
capı́tulo trata de la resolución del sistema

Ax = b (2.1)
A, la matriz del sistema, es una matriz cuadrada que depende de la ecuación
a resolver y, naturalmente, del método escogido. El término independiente b
depende del valor de las condiciones de contorno y de la densidad de carga (o
de fuerzas volumétricas, o de generación de calor) dentro del dominio. x es,
naturalmente, la incógnita, los valores del campo.
Una caracterı́stica muy importante de la matriz A es que casi todos sus
elementos son nulos. Por ejemplo, la figura 2.1 muestra la malla de elementos
finitos utilizada para analizar el flujo alrededor del ala de un avión y la matriz
A que tiene asociada. Se ha dibujado un punto en la posición de todos los
elementos de la matriz cuyo valor es distinto de cero. Obsérvese que exigua
minorı́a constituyen.
Una matriz con esta caracterı́stica es llamada rala o cuasivacı́a1 . Esta carac-
terı́stica ofrece la posibilidad de tratar matrices de mucha mayor dimensión de
1 En inglés, sparse. Cierta similitud fonética parece haber llevado en ocasiones a traducirlo

(erróneamente) como dispersa.

3
4 CAPÍTULO 2. RESOLUCIÓN DE SISTEMAS LINEALES

The adjacency matrix.


0
1

500
0.9

0.8 1000

0.7 1500

0.6
2000

0.5
2500
0.4
3000
0.3

0.2 3500

0.1 4000

0 0 500 1000 1500 2000 2500 3000 3500 4000


0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 nz = 28831

Figura 2.1: Ala de avión, su malla y su matriz asociadas.

lo que serı́a de otra forma posible. Por ejemplo, es posible almacenar solamente
los elementos que sean distintos de cero, junto con sus posiciones. En el caso de
la matriz del ejemplo, de dimensión 1700 y con 3500 elementos no nulos, no es
necesario almacenar 1700 × 1700 = 3, 500, 000 posiciones de memoria, sino que
bastan con 3500 × 3 = 10,500 posiciones (1 para el valor del elemento y dos
para su posición en la matriz).
De hecho, no es solamente la necesidad de memoria la que se puede reducir
de una forma muy marcada, sino también el tiempo de cómputo requerido.
Son ası́ las técnicas de resolución de sistemas ralos las que hacen posibles el
tratamiento de problemas que no sean de dimensión muy reducida.
Existen tres tipos de métodos fundamentales para la resolución de sistemas
lineales: los directos, los iterativos y los semidirectos.
Los métodos directos resuelven las ecuaciones en un número finito de pa-
sos. Los métodos iterativos van mejorando una estimación inicial de la solución
(a menudo x = 0), aunque sin llegar jamás a la solución exacta. Tienen, sin
embargo, menores requerimientos de memoria que los métodos directos. Los se-
midirectos pueden, en principio, resolver también el sistema en un número finito
de pasos, pero en su planteamiento y análisis son más parecidos a los iterativos.
El resto del capı́tulo explicará algún método, o algunos métodos, pertene-
cientes a cada categorı́a. Son, de todas formas, los más usados en la resolución
numérica de campos.
2.2. MÉTODO DIRECTO: LA FACTORIZACIÓN LU 5

2.2 Método directo: la factorización LU 4 Básico

Un método directo es un método que alcanza la solución tras un número finito 5 Avanzado
de pasos. De todos ellos, el más empleado en el problema que aquı́ se trata es una
generalización del método de eliminación de Gauss conocida como factorización
LU.
En el resto de la sección se explica la factorización de Gauss en el contexto
de las matrices llenas. Después se exponen las modificaciones necesarias para su
aplicación a matrices ralas.

2.2.1 Factorización LU de matrices llenas


La eliminación de Gauss (y la factorización LU) se basan en una observación
aparentemente trivial: es muy fácil resolver un sistema lineal cuando la matriz
A es triangular. En efecto, si se tiene un sistema como
    
2 0 0 0 x1 3
 3 1 0 0   x2   −1 
 −4 0 3 0   x3  =  5  (2.2)
    

7 1 0 −4 x4 0
se puede resolver primero x1 de la primera ecuación (la primera fila), conocido x1
se resuelve x2 de la segunda, conocidos x1 y x2 se puede resolver x3 de la tercera,
y ası́ sucesivamente. Evidentemente, se puede proceder ası́ porque la matriz del
sistema tiene elementos no nulos solamente por debajo de la diagonal principal
(los elementos aij , con i ≥ j). Si la matriz fuera triangular superior (elementos
no nulos solamente por encima de la diagonal superior) se podrı́a proceder de
la misma forma, salvo que se tendrı́a que comenzar por la última componente
de x, en vez de por la primera (¡compruébese!).
Esta observación no dejarı́a de ser trivial sino fuera por que toda matriz A
no singular se puede escribir como el producto de una matriz triangular inferior
por una superior:

A = LU (2.3)
Es costumbre denotar al factor triangular inferior por L (del inglés lower) y
al superior por U (de upper). La factorización LU es, esencialmente, el procedi-
miento de cálculo de estos dos factores a partir de la matriz A.
Supóngase entonces que se ha logrado calcular L y U . Ahora la resolución
del sistema Ax = b es inmediata. En efecto, este sistema es equivalente a

LU x = b (2.4)
Consideremos también el sistema

Ly = b (2.5)
Como este es un sistema triangular inferior, es fácil de resolver. La solución
es y = L−1 b. Además, de la ecuación (2.4)
6 CAPÍTULO 2. RESOLUCIÓN DE SISTEMAS LINEALES

U x = L−1 b = y (2.6)
¡Pero esto vuelve a ser una ecuación con matriz triangular!. Como y es
conocida (se ha resuelto (2.5)), es ahora fácil calcular x.
En resumen, se han resuelto sucesivamente los sistemas

Ly = b (2.7)
Ux = y (2.8)

El primer sistema es triangular inferior, luego las incógnitas se resuelven


iendo de la primera a la última. El segundo es triangular superior, en el que las
incógnitas se resuelven de la última a la primera. Es por esto que el procedi-
miento completo se conoce por la substitución hacia delante y hacia atrás.
El problema que queda es, naturalmente, el cálculo de los factores L y U .
Es esta la tarea, con mucho, más complicada y costosa del procedimiento.
La técnica consiste en ir eliminado sucesivamente los elementos de A que se
encuentren por debajo de la diagonal. Quizá la forma más sencilla de explicarlo
es mediante un ejemplo. Supóngase ası́ que se desea factorizar la matriz
 
3 1 0 1
 1 4 2 0 
A=  0 2 5 2 
 (2.9)
1 0 2 6
Considérese el elemento (2,1) (segunda fila, primera columna). Este elemento
(un 1) está por debajo de la diagonal principal e impide, por tanto, que la matriz
A sea diagonal superior. Para eliminar este elemento, se puede premultiplicar
por una triangular inferior:

    
1 0 0 0 3 1 0 1 3 1 0 1
 −l2,1 1 0 0   1 4 2 0   1 − l2,1 3 4 − l2,1
2 −l2,1 
  = 
 0 0 1 0  0 2 5 2   0 2 5 2 
0 0 0 1 1 0 2 6 1 0 2 6
(2.10)
El término l2,1 se escoge de manera que anule al término (2, 1) de la nueva
matriz, es decir
1
1 − 3l2,1 = 0 ⇒ l2,1 = (2.11)
3
Luego,

    
1 0 0 0 3 1 0 1 3 1 0 1
 −1 1 0 0   1 4 2 0   0 11
2 − 31 
 3  = 3  (2.12)
 0 0 1 0  0 2 5 2   0 2 5 2 
0 0 0 1 1 0 2 6 1 0 2 6
2.2. MÉTODO DIRECTO: LA FACTORIZACIÓN LU 7

Ahora, obsérvese que


 −1  
1 0 0 0 1 0 0 0
 −1 1 0 0   1 1 0 0 
 3  = 3  (2.13)
 0 0 1 0   0 0 1 0 
0 0 0 1 0 0 0 1

En realidad, es en general cierto para todas las matrices triangulares infe-


riores formadas por una diagonal de 1’s y un solo elemento adicional debajo de
la diagonal, que su inversa es ella misma salvo por el elemento adicional que
cambia signo.
Se sigue ası́ de (2.12) que:

    
3 1 0 1 1 0 0 0 3 1 0 1
 1 4 2 0   1 1 0 0   0 11
2 − 31 
A= = 3  3  = L1 A1 (2.14)
 0 2 5 2   0 0 1 0  0 2 5 2 
1 0 2 6 0 0 0 1 1 0 2 6

La matriz A1 tiene todavı́a un elemento en la primera columna por debajo de


la diagonal distinto de 0: el 1 de la cuarta fila. Procediendo de manera análoga
a la anterior se tiene:

    
3 1 0 1 1 0 0 0 3 1 0 1
 0 11
2 − 13   0 1 0 0   0 11 2 − 31 
A1 =  3 =  3  = L2 A2
 0 2 5 2   0 0 1 0  0 2 5 2 
1
1 0 2 6 3 0 0 1 0 − 13 2 173
(2.15)
Nótese que la matriz L2 no afecta más que a la cuarta fila de A2 . Por tanto,
no puede cambiar los ceros de las filas segunda y tercera a algo no nulo. Esto
es, naturalmente, lo que se pretende.
En todo caso, ya no hay elementos a eliminar en la primera columna de A2 .
En la segunda columna el elemento (3, 2) es distinto de cero (2). Ası́, se tiene:

    
3 1 0 1 1 0 0 0 3 1 0 1
 0 11 2 − 13   0 1 0 0   0 11 2 − 31 
A2 =  3 = 3
24  = L3 A3
6
 43

 0 2 5 2   0 1 0  0 0
11 11 11
0 − 31 2 17
3 0 0 0 1 0 − 13 2 17
3
(2.16)
Hay que notar ahora que la matriz L3 no afecta a la primera columna de A3 .
Es por esto que se ha comenzado por eliminar la primera columna, y por lo que
una vez que se elimine la segunda se comenzará por la tercera. Las matrices L’s
que afectan a cada columna no pueden modificar las columnas anteriores.
En A3 el elemento (4, 2) es distinto de cero. Por tanto, se elimina:
8 CAPÍTULO 2. RESOLUCIÓN DE SISTEMAS LINEALES

    
3 1 0 1 1 0 0 0 3 1 0 1
 0 11 2 − 31   0 1 0 0   0 11
2 − 31 
A3 =  3 3
24  =  24  = L4 A4
43
   43

 0 0
11 11 0 0 1 0  0 0 11 11
1
0 − 13 2 17
3 0 11 0 1 0 0 24
11
62
11
(2.17)
Finalmente, solo queda eliminar el término (4, 3) de A4 . De aquı́ resulta:

    
3 1 0 1 1 0 0 0 3 1 0 1
11
 0
3 2 − 13   0 1 0 0   0 11
3 2 − 13 
A4 =  43 24  = 
   43 24  = L5 U

 0 0 11 11 0 0 1 0  0 0 11 11
24 62 24 2048
0 0 11 11 0 0 43 1 0 0 0 473
(2.18)
U es una matriz triangular superior. Ahora, de todo lo anterior se sigue:

A = L1 A1 = L1 L2 A2 = L1 L2 L3 A3 = L1 L2 L3 L4 A4 = L1 L2 L3 L4 L5 U (2.19)
Por otra parte, el producto de matrices triangulares inferiores es triangular
inferior. Luego L1 L2 L3 L4 L5 es una triangular inferior que se llamará L. Es,
además, muy fácil de calcular. En efecto
 
1 0 0 0
 1 1 0 0 
L= 3  (2.20)
 0 6 1 0 
11
1 1 24
3 11 43 1
Es decir, el efecto de cada Li es añadir su término fuera de la diagonal.
Esto es válido en general, para matrices Li como las que resultan del proceso
de factorización (una diagonal de 1’s más un término fuera de diagonal).
Nótese que para calcular cada matriz Li hay que resolver la ecuación

−li,(k,l) ai−1,(l,l) + ai−1,(k,l) = 0 (2.21)


siendo (k, l) el término a eliminar. Para resolver esta ecuación en (li,(k,l) es
preciso que el término de la diagonal ai−1,(l,l) 6= 0. Este término es llamado el
pivote. Caso de ser nulo, se puede intentar permutar la fila l-ésima por otra
situada más abajo. Esto equivale a reordenar las variables del sistema lineal. Si
no hubiera ninguna permutación que resolviera el problema (que todas dieran
pivotes nulos) es que la matriz es singular y no hay, por tanto, solución única.
Por otra parte, en el ejemplo que se estudia, se puede comprobar que

1 1
    
3 1 0 1 3 0 0 0 1 3 0 3
11
 0
3 2 − 31   0 11
3 0 0  0 1 6
11
1
11  = DLT

U =
 0 43 24  = 
  43
 24
0 11 11 0 0 11 0  0 0 1 43

2048 2048
0 0 0 473 0 0 0 473 0 0 0 1
(2.22)
2.2. MÉTODO DIRECTO: LA FACTORIZACIÓN LU 9

Luego

A = LU = LDLT (2.23)
Esta expresión es conocida como la factorización triple LDLT . Es posible
llevarla a cabo si la matriz A es simétrica (¡pruébese!). Esta simetrı́a se pre-
senta a menudo en problemas de campos, y se puede explotar para mejorar el
procedimiento de factorización LU arriba explicado.

2.2.2 Factorización LU de matrices ralas


La factorización LU expuesta arriba tiene el inconveniente de que las operaciones
se realizan sobre matrices llenas, es decir, sin tener en cuenta que la mayor parte
de los elementos de la matriz son nulos.
Esencialmente, la factorización LU con matrices ralas procede de la misma
forma que la factorización con matrices llenas. Las diferencias que existen son
las siguientes:

1. Solamente se almacenan los elementos no nulos de las matrices, junto con


su localización. Ası́, por ejemplo, en Matlab, la matriz:
 
2 1 0 0
 1 2 1 0 
 
 0 1 2 1 
0 0 1 2

se almacena en tres vectores, un primero que almacena los valores no


nulos, y otros dos que almacenan las posiciones (fila y columna) donde se
encuentran:

( 2 1 1 2 1 1 2 1 1 2 )
( 1 1 2 2 2 3 3 3 4 4 )
( 1 2 1 2 3 2 3 4 3 4 )

Existen otras formas de codificar la posición más eficientes que la anterior,


aunque más complejas.

2. Existe una lógica que determina las operaciones y sumas que es preciso
realizar, saltándose todas las operaciones que consistan en multiplicar por
cero, o sumar cero. Esto es posible porque se saben los elementos que son
nulos (los que no estén codificados en los vectores anteriores).

En cualquier caso, es claro que interesa conseguir que los factores LU que
resulten tengan tantos elementos nulos como sea posible. En este sentido, el
orden que adopten las variables y ecuaciones es de crucial importancia. Por
ejemplo, considérese la matriz
10 CAPÍTULO 2. RESOLUCIÓN DE SISTEMAS LINEALES

 
20 15 6 4
 15 6 0 0 
A=
 6

0 4 0 
4 0 0 10

Al ser simétrica, admite una descomposición LDLT . Es fácil comprobar que


el factor L es
 
1 0 0 0
 0,75 1 0 0 
 
 0,30 0,8571 1 0 
0,20 0,5714 0,2264 1
Es decir, aún cuando la matriz original tenı́a bastantes ceros, el factor L
tiene todos los elementos posibles (los de debajo de la diagonal) no nulos.
En cambio, si se factoriza la matriz
 
10 0 0 4
 0 4 0 6 
B=  0 0 6 15 

4 6 15 20
se obtiene el factor L
 
1 0 0 0
 0 1 0 0 
 
 0 0 1 0 
0,4 1,5 2,5 1
Nótese que ahora el factor L tiene tantos ceros como la matriz B. Por otra
parte, las matrices A y B representan al mismo sistema lineal. En efecto, lo único
que se ha hecho es cambiar el orden de ecuaciones (filas) y variables (columnas),
de manera que la que antes era la primera es ahora la última, y viceversa.
Por tanto, es importante ordenar adecuadamente las ecuaciones y las varia-
bles al formar la matriz del sistema lineal a resolver. “A grosso modo”, el mejor
sitio para los ceros es al principio de las filas, antes de los elementos no nulos.
Esto es porque al hacer la eliminación de Gauss, estos elementos ya no requieren
ser eliminados.
Existen una serie de algoritmos que buscan el orden óptimo en el que colo-
car ecuaciones y variables. Matemáticamente, este es un problema para el que
todavı́a no se ha encontrado solución, aunque la experiencia demuestra que al-
gunos de los algoritmos propuestos son muy eficaces.
En el ejemplo anterior se ve como lo más eficaz es colocar la fila con más
elementos no nulos al final de la matriz. Esta es la idea subyacente al algoritmo
del grado mı́nimo, quizá el más popular de los algoritmos de reordenación. Por
ejemplo, la figura 2.2 muestra la reordenación que este algoritmo da para la
matriz de la figura 2.1. Obsérvense las estructuras en forma de flecha que se
forman, que recuerdan lo obtenido en el ejemplo.
2.3. MÉTODOS ITERATIVOS 11

Minimum degree
0

500

1000

1500

2000

2500

3000

3500

4000

0 500 1000 1500 2000 2500 3000 3500 4000


nz = 28831

Figura 2.2: Reordenación de la matriz.

2.3 Métodos iterativos


Los métodos iterativos resuelven el sistema lineal

Ax = b (2.24)
calculando una serie {x0 , x1 , . . . , xk , . . .} que aproxima cada vez mejor la solu-
ción

lı́m xk = x = A−1 b (2.25)


k→∞

Los dos métodos iterativos de uso más frecuente en el cálculo de campos son
el de Jacobi y el de Gauss-Seidel, que se estudian en la siguiente sección. Después,
se expone una mejora a estos métodos, importante para obtener la convergencia
de la serie a una velocidad razonable, conocida como sobrerelajación sucesiva.

2.3.1 Los métodos de Jacobi y Gauss-Seidel


Escrı́base de nuevo la ecuación (2.24):

Ax − b = 0 (2.26)
Sumando un término P x a cada término, siendo P una matriz que se defi-
nirá más tarde, de la misma dimensión que A:

(A + P )x − b = P x (2.27)

También podría gustarte