- Método del gradiente conjugado
-
En matemática, el método del gradiente conjugado es un algoritmo para resolver numéricamente los sistemas de ecuaciones lineales cuyas matrices son simétricas y definidas positivas. Es un método iterativo, así que se puede aplicar a los sistemas dispersos que son demasiado grandes para ser tratados por métodos directos como la descomposición de Cholesky. Tales sistemas surgen frecuentemente cuando se resuelve numéricamente las ecuaciones en derivadas parciales.
El método del gradiente conjugado se puede utilizar también para resolver los problemas de optimización sin restricciones como la minimización de la energía.
El método del gradiente biconjugado proporciona una generalización para matrices no simétricas. Varios métodos del gradiente conjugado no lineales busca los mínimos de las ecuaciones no lineales.
Contenido
Descripción del método
Supongamos que queremos resolver el siguiente sistema de ecuaciones lineales
- Ax = b
donde la n-por-n matriz A es simétrica (i.e., AT = A), definida positiva (i.e., xTAx > 0 para todos los vectores no cero x en Rn), y real.
Denotamos la única solución de este sistema por x*.
El método de gradiente conjugado como un método directo
Decimos que dos vectores no cero u y v son conjugados (con respecto a A) si
Ya que A simétrica y definida positiva, el lado izquierdo define un producto interior
Así, dos vectores son conjugados si son ortogonales con respecto a este producto interior. La conjugación es una relación simétrica: si u es conjugado a v, entonces v es conjugado a u. Nótese que esta noción de conjugación no se relaciona con la de conjugación compleja.
Supongamos que {pk} es una secuencia de n direcciones mutuamente conjugadas. Entonces los pk forman una base de Rn, por lo tanto podemos extender la solución x* de Ax = b en esta base:
Los coeficientes se dan por
Este resultado es quizás muy transparente si se considera el producto interior definido anteriormente.
Esto da el siguiente método para resolver la ecuación Ax = b. Primero encontramos una secuencia de n direcciones conjugadas y luego computamos los coeficientes αk.
El método de gradiente conjugado como un método iterativo
El algoritmo resultante
Código ejemplar en Octave o Matlab
function [x] = conjgrad(A,b,x0) r = b - A*x0; w = -r; z = A*w; a = (r'*w)/(w'*z); x = x0 + a*w; B = 0; for i = 1:size(A)(1); r = r - a*z; if( norm(r) < 1e-10 ) break; end if B = (r'*z)/(w'*z); w = -r + B*w; z = A*w; a = (r'*w)/(w'*z); x = x + a*w; end end
El método de gradiente conjugado precondicionado
Referencias
El método de gradiente conjugado fue propuesto originalmente en
- Hestenes, Magnus R.; Stiefel, Eduard (diciembre 1952). «Methods of Conjugate Gradients for Solving Linear Systems» (PDF). Journal of Research of the National Bureau of Standards 49 (6). http://nvl.nist.gov/pub/nistpubs/jres/049/6/V49.N06.A08.pdf.
Descripciones del método se puede encontrar en los siguientes libros de texto:
- Kendell A. Atkinson (1988), An introduction to numerical analysis (2ª ed.), Sección 8.9, John Wiley and Sons. ISBN 0-471-50023-2.
- Mordecai Avriel (2003). Nonlinear Programming: Analysis and Methods. Dover Publishing. ISBN 0-486-43227-0.
- Gene H. Golub y Charles F. Van Loan, Matrix computations (3ª ed.), Capítulo 10, Johns Hopkins University Press. ISBN 0-8018-5414-8.
Wikimedia foundation. 2010.