You are on page 1of 11

UNIVERSIDAD AUSTRAL DE CHILE

FACULTAD DE CIENCIAS DE LA INGENIERÍA


INSTITUTO DE OBRAS CIVILES
ESCUELA DE INGENIERÍA CIVIL EN OBRAS CIVILES.

Descripción e implementación
del método de los gradientes conjugados.

Resolución de sistemas de ecuaciones lineales

Estos apuntes son entregados a los alumnos que cursan la asignatura de Computación para
Ingeniería Estructural (IOCC 281), para la Carrera de Ingeniería Civil en Obras Civiles de
la Universidad Austral de Chile.

El método de los gradientes conjugados constituye una poderosa herramienta para resolver
en forma iterativa sistemas de ecuaciones lineales, muy utilizada actualmente en la
resolución de sistemas de muchas ecuaciones y muchas incógnitas, hallándosele grandes
ventajas por sobre otros métodos para resolver sistemas con estas características.

Pablo E. Oyarzún H.
Ing. Civil en Obras Civiles
Universidad Austral de Chile
1. Preliminares.

El método de los gradientes conjugados ha sido ampliamente


utilizado para la resolución de sistemas de ecuaciones lineales que consisten de
muchas ecuaciones con muchas incógnitas, incluso habiéndose empleado en
forma satisfactoria para resolver sistemas no lineales, mediante resolución
repetitiva de grandes sistemas de ecuaciones.
La base del método se inspira en la equivalencia entre resolver el
sistema
KdR (1)

y minimizar la siguiente forma cuadrática:

min f  d  =
2

1 T
d K d   dT R (2)

Lo anterior puede demostrarse fácilmente igualando a cero el


gradiente de la función especificada en la ecuación anterior, o sea

1 T 
 2  d K e1   2  e1 K d   e1 R 
1 T T

 f d1   
  1 T
grad f  d  = 
f d 2 
=2
 d K e2   2  e2 K d   e2 R 
1 T T
(3)
    
    
 f d n   1 
  d K en    en K d   en R 
T 1 T T

2 2 

donde

1 0
   
0 1
e1    , e2    , etc
 
   
0 0

Siendo la matriz K simétrica y definida positiva ( xT K x  0 para


cualquier vector x ), en cada componente del gradiente dado por la expresión (3)
la traspuesta del primer término es igual al segundo término, por lo que
 f d1   e1T K d  e1T R   e1T   e1T 
       T
f d 2   e 2T K d  e 2T R   e 2T  e
grad f  d  =  =  K d  2 R
           
   T     T 
 f d n   e n K d  e nT R   e nT   en 

 e1T  1 0
 T  1 
 e2 

  
K d  R  
  K d  R
 
 T   
 en  0 1

K dR

2. Método del descenso más rápido (steepest descent).

Consiste en un método iterativo en que el vector inicial de prueba


va aproximándose paulatinamente al vector solución del sistema real; en primera
instancia debe escogerse la dirección en que el funcional f decrezca lo más
rápidamente posible, para un vector de prueba xi  , dirección que es dada por el
resíduo

 
r  i   f ' xi   b  A x i  (4)

De la misma forma en que el residuo cuantifica cuán próximo se


encuentra A xi  del vector b , el error e  xi   = xi   x establece cuán próximo se

está del vector solución x ; por tanto resulta sencillo visualizar que r i    A ei  y
principalmente que r i   f '  xi   corresponde al descenso más rápido hacia el

vector solución. Así, el problema generalmente radica en hallar una dirección de


búsqueda para el próximo vector de prueba, o sea:

x1  x 0   r  0 (5)

Hallar α con tal de minimizar el funcional f  x1  equivale a igualar


a cero la derivada direccional

1
 
f x  . Luego, por regla de la cadena se tiene

 T 
       
T
f x1  f ' x1  x1  f ' x1  r  0 (6)
     
Igualando a cero el resultado anterior se llega a la conclusión de que

α debiera escogerse de tal forma que los vectores f '  x1 
T
y r  0 sean

ortogonales. Notando además que f '  x1   r 1 , resulta

r  
T
1
r  0  0

 b  A x  
T
1
r  0  0

b  A  x 
T
 0
  r
0
r   0
0

 b  A x    
T T
0
r  0   A r  0 r  0  0

 b  A x    
T T
0
r  0   A r  0 r  0

r      A r  
T T
0
r  0   r  0 0

 r   r 
T
0 0

 (7)
r   A r 
T
0 0

De esta forma, el método del descenso más rápido puede resumirse


en el siguiente algoritmo:

r    b  A x 
i i
(8)

 r   r 
T
i i

  i
(9)
 r   A r 
T
i i

x i 1  x i     i  r  i  (10)

Pese a lo simple que pueda parecer el algoritmo, aún es posible


evitar uno de los dos productos matriz-vector, pre-multiplicando (10) por A y
sumando b , de modo que se tenga

r  i 1  r i     i  A r  i  (11)

De esta forma las ecuaciones (9) y (11) hacen uso del producto
A r  i  , y al mismo tiempo son suficientes para llevar a cabo la implementación del
método, sin embargo teniendo ahora la desventaja de no poder visualizar la
tendencia seguida por los valores obtenidos para xi  en cada iteración.

3. Método de las direcciones conjugadas.

En muchas ocasiones el método de descenso más rápido ejecuta


algunos pasos en la misma dirección de búsqueda que en pasos de cálculo
anteriores; con esta idea en mente pueden determinarse direcciones de búsqueda
que sean mutuamente perpendiculares. Sean ellas d 0 , d1 , … , d n1 , de tal forma
que cada una de estas direcciones sean usadas en exactamente un paso iterativo,
en general, se tendrá para cualquier paso iterativo:

x
i 1
 x      d 
i i i
(12)

El parámetro  i  es hallado de tal forma que el error ei 1 sea


ortogonal con la dirección de búsqueda di  y dicha dirección de búsqueda no
vuelva a ser utilizada en pasos iterativos posteriores. Así, usando esta condición
se tendrá lo siguiente:

 d  
T
i
e i 1  0

 d     e      d     0
T
i i i i

 d    e 
T
i i

  i
(13)
 d   d 
T
i i

Sin embargo, al usarse la expresión anterior, no se conoce el error


e  . La forma de sortear esta dificultad está en hacer que dos direcciones
i

cualesquiera, di  y d j  , sean ortogonales respecto a la matriz A , o sea:

 d  
T
i
A d j   0 , i j (14)

Nuestro nuevo requerimiento implica que el error ei 1 sea


ortogonal a di  con respecto a la matriz A , siendo que dicha ortogonalidad
equivale a encontrar el punto mínimo a lo largo de la dirección di  . Así,
diferenciando el funcional correspondiente a la forma cuadrática en relación al
parámetro α, se tendrá

d
d

f x   0
i 1

 
f ' xi 1  d xi 1  0  
T

  d

 
T
 r  i 1 d i   0

 
T
 di  A ei 1  0 (15)

Así, a partir de la expresión dada por (13), dicho parámetro en caso


que las direcciones de búsqueda sean ortogonales respecto a la matriz A (o sea,
que sea “ A -ortogonal”) resulta ser

 d  
T

i 
i
A e i 
  (16)
 d  
T
i
A di 

 d   r  
T
i i

 (17)
 d   A d 
T
i i

Esta última modificación, respecto a hallar el parámetro α, permite


que el método pueda ser implementado. Cabe mencionar que en caso que se
escojan las direcciones de búsqueda como siendo iguales a los residuos
correspondientes, entonces el método se hará equivalente al método de descenso
más rápido.

4. Conjugación de Gram-Schmidt.

El objetivo de esta sección es la obtención de una secuencia de


direcciones de búsqueda di   que sean mutuamente ortogonales, respecto a la

matriz A .
Sean los vectores linealmente independientes u 0 , u1 , … , u n 1 ;
para construir los di  se extraerá, a partir de los ui  , todas las componentes que
no sean ortogonales a los vectores d determinados previamente. De esta forma,
para los ik definidos tal que i  k , serán encontrados los di  considerando

i 1
di   u i     ik d k  (18)
k 0

Aplicando traspuesta en la ecuación anterior y pos-multiplicando


ambos miembros por A d j  , se llega a

 d      
T T i 1 T
i
A d j   ui  A d j     ik d k  A d j 
k 0

   
T T
0  ui  A d j    ij d j  A d j 

 u  
T
i
A d j 
ij  (19)
 d  
T
A d
j j

Sin embargo surge un inconveniente, desde el punto de vista de la


memoria de almacenamiento, al tener que almacenar todas y cada una de las
direcciones d k  , con k  1,..., i  1 para el cálculo de di  .

5. Método de los gradientes conjugados.

Corresponde a un caso particular del método de las direcciones


conjugadas, intentando sortear el inconveniente de tener que almacenar todas las
direcciones de búsqueda, ortogonalizando cada una de las direcciones nuevas que
vayan siendo halladas respecto a las direcciones previamente determinadas, en
relación a la matriz A .
Así, el método de los gradientes conjugados no es más que el
método de las direcciones conjugadas seleccionando los residuos r i  como
siendo los vectores linealmente independientes ui  , o sea haciendo ui   r i  . La
justificación de efectuar tal elección radica principalmente en dos razones: la
primera, que los residuos son empleados en el método de descenso más rápido y
dicho método funciona; en segundo lugar puede demostrarse que dichos residuos
r   poseen la propiedad de ser ortogonales a cada una de las direcciones de
i
búsqueda d k  previamente halladas, o sea ortogonales a las direcciones d k  para
k  1,..., i  1 .

El procedimiento garantiza la obtención de una nueva dirección de


búsqueda, linealmente independiente salvo que el residuo sea cero, en cuyo caso
el problema estaría resuelto. No obstante existe aún un mejor motivo de porqué
escoger los residuos como direcciones de búsqueda, tal como será visto a
continuación.
En términos de espacios y subespacios vectoriales, al obtenerse las
direcciones de búsqueda a partir de los residuos, esto implica que el subespacio
vectorial proyectado por r  0 , r 1 , , r i1  equivale a D i (subespacio al cual

pertenece di  ). Por otra parte se tiene

r
i 1
  A e
i 1


  A e i     i  d  i  
 r       A d 
i i i
(20)

El resultado anterior respalda el hecho de que un residuo r i  es


determinado como combinación lineal entre el residuo previo y el producto
A d
i1
. De esta forma puede decirse que el subespacio D i+1 es conformado
mediante la unión del subespacio previo D i y el subespacio A D i. De allí que


D i  span d 0 , A d 0 , A 2 d 0 , , A n1 d 0 
 span r   , A r   , A
0 0 2
r  0 , , A n1 r  
0
(21)

Este subespacio es conocido como subespacio de Krylov; un


subespacio creado aplicando repetitivas pre-multiplicaciones de un vector por
una matriz. Siendo que el subespacio D i está contenido dentro de D i+1, el hecho
de que el residuo r i1 sea ortogonal al subespacio D i+1 implica que dicho residuo
es también “ A -ortogonal” respecto a D i. De esta forma se facilitan las
expresiones de la conjugación de Gram-Schmidt, pues el residuo r i 1 es “ A -
ortogonal” respecto a todas las direcciones de búsqueda previamente
determinadas, salvo di  . Así, a partir de la conjugación de Gram-Schmidt,
substituyendo los vectores linealmente independientes por los residuos r i  , el
valor del parámetro β resulta
 r    A d 
T
i j

ij  (22)
 d   A d 
T
j j

Sin embargo esta última expresión aún puede simplificarse;


efectuando el producto escalar entre r i  y la ecuación (20), junto con percibir el

hecho de que  r i   r  j   0 para i  j y tomando en cuenta la ecuación (22), se


T

llega a

r      
T T T
i
r  j 1  r  i  r  j     j  r i  A d j 

     
T T T
  j  r i  A d j   r i  r  j   r i  r  j 1

 1
  
i
r  
i  T i 
r , i j

r    1 i  T i 
 
T
A d
j
   i 1 r i  j 1
i
r ,
 

0
 , otro caso


 1
r i  T i 
r   i  j 1
  i 1 ,
 ij  
 
T
d i 1 A di 1

0 , i  j 1

Como puede notarse la mayor parte de los términos ij se hacen


cero; así no es más necesario almacenar “antiguos” vectores de búsqueda para
garantizar la “ A -ortogonalidad” de los nuevos vectores de búsqueda. Esto
resulta clave en lo conveniente que resulta ser el método de los gradientes
conjugados, en lo que respecta a espacio de almacenamiento y a tiempo de
ejecución del algoritmo. Abreviando de la forma  i 1  i ,i 1 , se tendrá

 
T

 i 1
r i  r i 
  (por ecuación (17))
 d  
T
i 1
r i 1

 r  
T
i
r i 

r  
T
i 1
r  i 1
La última expresión resulta del hecho que puede demostrarse, en lo
que compete al método de direcciones conjugadas, que

 d    
T T
i
r i   ui  r i  (23)

Una vez planteadas las ideas que se han mostrado hasta ahora, es
posible definir un algoritmo para la resolución de un sistema de ecuaciones por el
método de los gradientes conjugados de la siguiente secuencia de cálculos:

d  0  r  0  b  A x 0 (24)

 
T

i 
r i 
r  i

  (25)
 d   A d 
T
i i

x
i 1
 x      d 
i i j
(26)
r  i 1  r  i     i  A d i  (27)

 r  
T

 i 1
i 1
r  i 1
  (28)
r  
T
i
r i 

di 1  r  i 1    i 1 d i  (29)

Por lo tanto, a partir de las ecuaciones (24) a la (29) se define el


siguiente algoritmo de cálculo para la resolución de sistemas lineales por el
método iterativo de los gradientes conjugados.

1. Se efectúa la lectura de los coeficientes de la matriz A y el vector libre


b.
2. Se define un valor inicial para el vector x antes de la primera iteración,
o sea x 0 . Luego se determinan el residuo r  0 y la dirección de
búsqueda d 0 correspondientes, previo a la primera iteración, por
medio de la ecuación (24).
3. Se da inicio al loop iterativo para determinarse una nueva aproximación
tanto para la incógnita como también para el residuo y la nueva
dirección de búsqueda, considerando i  1, niter , siendo niter el
número máximo de iteraciones;
3.1. Se determina  i  a partir de (25);
3.2. Se calculan un nuevo valor para la incógnita, xi1 , y para
el residuo, r i1 , válidos para la próxima iteración usando
(26) y (27) respectivamente;
3.3. En caso que el residuo sea lo suficientemente pequeño, de
acuerdo a una tolerancia especificada, se obtiene entonces
el vector solución deseado, saliéndose del loop iterativo,
imprimiendo los resultados y deteniendo la ejecución del
programa. En caso que se llegue al número máximo de
iteraciones, entonces se muestra un mensaje revelando
número insuficiente de iteraciones para la tolerancia
especificada y se detiene el programa;
3.4. Se obtiene  i 1 mediante la expresión dada en (28) y
finalmente la nueva dirección de búsqueda di 1 usando la
ecuación (29).

You might also like