Articulo de referencia

Método del gradiente conjugado

Comparación de la convergencia del descenso de gradiente con tamaño de paso óptimo (en verde) y vector conjugado (en rojo) para minimizar una función cuadrática asociada a un si...

Comparación de la convergencia del descenso de gradiente con tamaño de paso óptimo (en verde) y vector conjugado (en rojo) para minimizar una función cuadrática asociada a un sistema lineal dado. El gradiente conjugado, asumiendo aritmética exacta, converge en un máximo de n pasos, donde n es el tamaño de la matriz del sistema (en este caso, n  =  2).

En matemáticas , el método del gradiente conjugado es un algoritmo para la solución numérica de sistemas de ecuaciones lineales específicos , concretamente aquellos cuya matriz es semidefinida positiva . Este método se suele implementar como un algoritmo iterativo , aplicable a sistemas dispersos demasiado grandes para ser resueltos mediante una implementación directa u otros métodos directos como la descomposición de Cholesky . Los sistemas dispersos de gran tamaño suelen surgir al resolver numéricamente ecuaciones diferenciales parciales o problemas de optimización.

El método del gradiente conjugado también puede utilizarse para resolver problemas de optimización sin restricciones , como la minimización de energía . Se atribuye comúnmente a Magnus Hestenes y Eduard Stiefel , [ 1 ] [ 2 ] quienes lo programaron en el Z4 , [ 3 ] y lo investigaron exhaustivamente. [ 4 ] [ 5 ]

El método del gradiente biconjugado proporciona una generalización a matrices no simétricas. Diversos métodos de gradiente conjugado no lineal buscan mínimos en problemas de optimización no lineal.

Descripción del problema abordado por los gradientes conjugados

Supongamos que queremos resolver el sistema de ecuaciones lineales

Aincógnita=b{\displaystyle \mathbf {A} \mathbf {x} =\mathbf {b} }

para el vectorincógnita{\displaystyle \mathbf {x} }donde el conocidonorte×norte{\displaystyle n\times n}matrizA{\displaystyle \mathbf {A} }es simétrico (es decir,AT=A{\displaystyle \mathbf {A} ^{\mathsf {T}}=\mathbf {A} }), definido positivo (es decir,incógnitaTAincógnita>0{\displaystyle \mathbf {x} ^{\mathsf {T}}\mathbf {Ax} >0}para todos los vectores distintos de ceroincógnita{\displaystyle \mathbf {x} }enRnorte{\displaystyle \mathbb {R} ^{n}}), y real , yb{\displaystyle \mathbf {b} }También se conoce. Denotamos la solución única de este sistema porincógnita{\displaystyle \mathbf {x} _{*}}.

La derivación como método directo

El método del gradiente conjugado puede derivarse desde diversas perspectivas, incluyendo la especialización del método de la dirección conjugada para la optimización y la variación de la iteración de Arnoldi / Lanczos para problemas de valores propios . A pesar de las diferencias en sus enfoques, estas derivaciones comparten un tema común: demostrar la ortogonalidad de los residuos y la conjugación de las direcciones de búsqueda. Estas dos propiedades son cruciales para desarrollar la conocida formulación concisa del método.

Decimos que dos vectores no nulos{\displaystyle \mathbf {u} }yv{\displaystyle \mathbf {v} }son conjugados (con respecto aA{\displaystyle \mathbf {A} }) si

TAv=0.{\displaystyle \mathbf {u} ^{\mathsf {T}}\mathbf {A} \mathbf {v} =0.}

DesdeA{\displaystyle \mathbf {A} }es simétrica y definida positiva, el lado izquierdo define un producto interno

TAv=,vA:=A,v=,ATv=,Av.{\displaystyle \mathbf {u} ^{\mathsf {T}}\mathbf {A} \mathbf {v} =\langle \mathbf {u} ,\mathbf {v} \rangle _{\mathbf {A} }:=\langle \mathbf {A} \mathbf {u} ,\mathbf {v} \rangle =\langle \mathbf {u} ,\mathbf {A} ^{\mathbf {T}}\mathbf {v} \rangle =\langle \mathbf {u} ,\mathbf {A} \mathbf {v} \rangle .}

Dos vectores son conjugados si y solo si son ortogonales con respecto a este producto interno. Ser conjugado es una relación simétrica: si{\displaystyle \mathbf {u} }es conjugado dev{\displaystyle \mathbf {v} }, entoncesv{\displaystyle \mathbf {v} }es conjugado de{\displaystyle \mathbf {u} }. Supongamos que

PAG={pag1,,pagnorte}{\displaystyle P=\{\mathbf {p} _{1},\dots,\mathbf {p} _{n}\}}

es un conjunto denorte{\displaystyle n}vectores mutuamente conjugados con respecto aA{\displaystyle \mathbf {A} }, es decirpagiTApagj=0{\displaystyle \mathbf {p} _{i}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{j}=0}a pesar deij{\displaystyle i\neq j}. EntoncesPAG{\displaystyle P}constituye una base paraRnorte{\displaystyle \mathbb {R} ^{n}}y podemos expresar la soluciónincógnita{\displaystyle \mathbf {x} _{*}}deAincógnita=b{\displaystyle \mathbf {Hacha} =\mathbf {b} }sobre esta base:

incógnita=i=1norteαipagiAincógnita=i=1norteαiApagi.{\displaystyle \mathbf {x} _{*}=\sum _{i=1}^{n}\alpha _{i}\mathbf {p} _{i}\Rightarrow \mathbf {A} \mathbf {x} _{*}=\sum _{i=1}^{n}\alpha _{i}\mathbf {A} \mathbf {p} _{i}.}

Multiplicando el problema por la izquierdaAincógnita=b{\displaystyle \mathbf {Hacha} =\mathbf {b} }con el vectorpagkT{\displaystyle \mathbf {p} _{k}^{\mathsf {T}}}rendimientos

pagkTb=pagkTAincógnita=i=1norteαipagkTApagi=i=1norteαipagk,pagiA=αkpagk,pagkA{\displaystyle \mathbf {p} _{k}^{\mathsf {T}}\mathbf {b} =\mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {x} _{*}=\sum _{i=1}^{n}\alpha _{i}\mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{i}=\sum _{i=1}^{n}\alpha _{i}\left\langle \mathbf {p} _{k},\mathbf {p} _{i}\right\rangle _{\mathbf {A} }=\alpha _{k}\left\langle \mathbf {p} _{k},\mathbf {p} _{k}\right\rangle _{\mathbf {A} }}

y entonces

αk=pagk,bpagk,pagkA.{\displaystyle \alpha _{k}={\frac {\langle \mathbf {p} _{k},\mathbf {b} \rangle }{\langle \mathbf {p} _{k},\mathbf {p} _{k}\rangle _{\mathbf {A} }}}.}

Esto da como resultado el siguiente método [ 4 ] para resolver la ecuación.Aincógnita=b{\displaystyle \mathbf {Hacha} =\mathbf {b} }: encontrar una secuencia denorte{\displaystyle n}direcciones conjugadas y luego calcular los coeficientesαk{\displaystyle \alpha _{k}}.

Como método iterativo

Si elegimos los vectores conjugadospagk{\displaystyle \mathbf {p} _{k}}Si lo hacemos con cuidado, es posible que no necesitemos todos ellos para obtener una buena aproximación a la solución.incógnita{\displaystyle \mathbf {x} _{*}}. Por lo tanto, queremos considerar el método del gradiente conjugado como un método iterativo. Esto también nos permite resolver aproximadamente sistemas dondenorte{\displaystyle n}es tan grande que el método directo llevaría demasiado tiempo.

Denotamos la estimación inicial porincógnita{\displaystyle \mathbf {x} _{*}}porincógnita0{\displaystyle \mathbf {x} _{0}}(podemos asumir sin pérdida de generalidad queincógnita0=0{\displaystyle \mathbf {x} _ {0}=\mathbf {0} }, de lo contrario considere el sistemaAz=bAincógnita0{\displaystyle \mathbf {Az} =\mathbf {b} -\mathbf {Ax} _{0}}en su lugar). Empezando porincógnita0{\displaystyle \mathbf {x} _{0}}Buscamos la solución y en cada iteración necesitamos una métrica que nos indique si estamos más cerca de la solución.incógnita{\displaystyle \mathbf {x} _{*}}(que desconocemos). Esta métrica proviene del hecho de que la soluciónincógnita{\displaystyle \mathbf {x} _{*}}es también el único minimizador de la siguiente función cuadrática.

F(incógnita)=12incógnitaTAincógnitaincógnitaTb,incógnitaRnorte.{\displaystyle f(\mathbf {x} )={\tfrac {1}{2}}\mathbf {x} ^{\mathsf {T}}\mathbf {A} \mathbf {x} -\mathbf {x} ^{\mathsf {T}}\mathbf {b} ,\qquad \mathbf {x} \in \mathbb {R} ^{n}\,.}

La existencia de un minimizador único es evidente ya que su matriz hessiana de segundas derivadas es simétrica definida positiva.

H(F(incógnita))=A,{\displaystyle \mathbf {H} (f(\mathbf {x} ))=\mathbf {A} \,,}

y que el minimizador (usarDF(incógnita)=0{\displaystyle Df(\mathbf {x} )=0}) resuelve el problema inicial que se deduce de su primera derivada

F(incógnita)=Aincógnitab.{\displaystyle \nabla f(\mathbf {x} )=\mathbf {A} \mathbf {x} -\mathbf {b} \,.}

Esto sugiere tomar el primer vector base.pag0{\displaystyle \mathbf {p} _{0}}ser el negativo del gradiente deF{\displaystyle f}enincógnita=incógnita0{\displaystyle \mathbf {x} =\mathbf {x} _{0}}. El gradiente deF{\displaystyle f}igualAincógnitab{\displaystyle \mathbf {Ax} -\mathbf {b} }Comenzando con una suposición inicialincógnita0{\displaystyle \mathbf {x} _{0}}, esto significa que tomamospag0=bAincógnita0{\displaystyle \mathbf {p} _{0}=\mathbf {b} -\mathbf {Ax} _{0}}. Los demás vectores de la base serán conjugados al gradiente, de ahí el nombre de método del gradiente conjugado . Tenga en cuenta quepag0{\displaystyle \mathbf {p} _{0}}es también el residuo proporcionado por este paso inicial del algoritmo.

Dejarrk{\displaystyle \mathbf {r} _{k}}ser el residuo en elk{\displaystyle k}º paso:

rk=bAincógnitak.{\displaystyle \mathbf {r} _{k}=\mathbf {b} -\mathbf {Ax} _{k}.}

Como se observó anteriormente,rk{\displaystyle \mathbf {r} _{k}}es el gradiente negativo deF{\displaystyle f}enincógnitak{\displaystyle \mathbf {x} _{k}}, por lo que el método de descenso de gradiente requeriría moverse en la dirección r k . Aquí, sin embargo, insistimos en que las direccionespagk{\displaystyle \mathbf {p} _{k}}Deben ser conjugadas entre sí. Una forma práctica de imponer esto es exigiendo que la siguiente dirección de búsqueda se construya a partir del residuo actual y todas las direcciones de búsqueda anteriores. La restricción de conjugación es una restricción de tipo ortonormal y, por lo tanto, el algoritmo puede considerarse un ejemplo de ortonormalización de Gram-Schmidt . Esto da como resultado la siguiente expresión:

pagk=rki<krkTApagipagiTApagipagi{\displaystyle \mathbf {p} _{k}=\mathbf {r} _{k}-\sum _{i<k}{\frac {\mathbf {r} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{i}}{\mathbf {p} _{i}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{i}}}\mathbf {p} _{i}}

(véase la imagen en la parte superior del artículo para observar el efecto de la restricción de conjugación en la convergencia). Siguiendo esta dirección, la siguiente ubicación óptima viene dada por

incógnitak+1=incógnitak+αkpagk{\displaystyle \mathbf {x} _{k+1}=\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k}}

con

αk=pagkT(bAincógnitak)pagkTApagk=pagkTrkpagkTApagk,{\displaystyle \alpha _{k}={\frac {\mathbf {p} _{k}^{\mathsf {T}}(\mathbf {b} -\mathbf {Ax} _{k})}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}}}={\frac {\mathbf {p} _{k}^{\mathsf {T}}\mathbf {r} _{k}}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}}},}

donde la última igualdad se deduce de la definición derk{\displaystyle \mathbf {r} _{k}}. La expresión paraαk{\displaystyle \alpha _{k}}se puede derivar si se sustituye la expresión para x k +1 en f y se minimiza con respecto aαk{\displaystyle \alpha _{k}}

F(incógnitak+1)=F(incógnitak+αkpagk)=:gramo(αk)gramo(αk)=¡0αk=pagkT(bAincógnitak)pagkTApagk.{\displaystyle {\begin{aligned}f(\mathbf {x} _{k+1})&=f(\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k})=:g(\alpha _{k})\\g'(\alpha _{k})&{\overset {!}{=}}0\quad \Rightarrow \quad \alpha _{k}={\frac {\mathbf {p} _{k}^{\mathsf {T}}(\mathbf {b} -\mathbf {Ax} _{k})}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}}}\,.\end{aligned}}}

El algoritmo resultante

El algoritmo anterior ofrece la explicación más sencilla del método del gradiente conjugado. Aparentemente, el algoritmo, tal como se describe, requiere el almacenamiento de todas las direcciones de búsqueda anteriores y los vectores de residuos, así como muchas multiplicaciones matriz-vector, y por lo tanto puede ser computacionalmente costoso. Sin embargo, un análisis más detallado [ 6 ] : pág. 558 del algoritmo muestra queri{\displaystyle \mathbf {r} _{i}}es ortogonal arj{\displaystyle \mathbf {r} _{j}}, es decirriTrj=0{\displaystyle \mathbf {r} _{i}^{\mathsf {T}}\mathbf {r} _{j}=0}, paraij{\displaystyle i\neq j}. Ypagi{\displaystyle \mathbf {p} _{i}}esA{\displaystyle \mathbf {A} }-ortogonal apagj{\displaystyle \mathbf {p} _{j}}, es decirpagiTApagj=0{\displaystyle \mathbf {p} _{i}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{j}=0}, paraij{\displaystyle i\neq j}. Esto puede considerarse que a medida que el algoritmo avanza,pagi{\displaystyle \mathbf {p} _{i}}yri{\displaystyle \mathbf {r} _{i}}abarcan el mismo subespacio de Krylov , donderi{\displaystyle \mathbf {r} _{i}}forman la base ortogonal con respecto al producto interno estándar, ypagi{\displaystyle \mathbf {p} _{i}}formen la base ortogonal con respecto al producto interno inducido porA{\displaystyle \mathbf {A} }. Por lo tanto,incógnitak{\displaystyle \mathbf {x} _{k}}puede considerarse como la proyección deincógnita{\displaystyle \mathbf {x} }en el subespacio de Krylov.

Es decir, si el método CG comienza conincógnita0=0{\displaystyle \mathbf {x} _{0}=0}, entonces [ 7 ]incógnitak=argramometroinorteyRnorte{(incógnitay)A(incógnitay):ydurar{b,Ab,,Ak1b}}{\displaystyle x_{k}=\mathrm {argmin} _{y\in \mathbb {R} ^{n}}{\left\{(x_{*}-y)^{\top }A(x_{*}-y):y\in \operatorname {span} \left\{b,Ab,\ldots ,A^{k-1}b\right\}\right\}}}dóndeincógnita{\displaystyle x_{*}}es la solución aAincógnita=b{\displaystyle \mathbf {A} \mathbf {x} =\mathbf {b} }.

El algoritmo se detalla a continuación para resolverAincógnita=b{\displaystyle \mathbf {A} \mathbf {x} =\mathbf {b} }dóndeA{\displaystyle \mathbf {A} }es una matriz real, simétrica y definida positiva. El vector de entradaincógnita0{\displaystyle \mathbf {x} _{0}}puede ser una solución inicial aproximada o0{\displaystyle \mathbf {0} }Se trata de una formulación diferente del procedimiento exacto descrito anteriormente.

r0:=bAincógnita0si r0 es suficientemente pequeño, entonces regresa incógnita0 como resultadopag0:=r0k:=0repetirαk:=rkTrkpagkTApagkincógnitak+1:=incógnitak+αkpagkrk+1:=rkαkApagksi rk+1 Si es suficientemente pequeño, entonces salga del bucle.βk:=rk+1Trk+1rkTrkpagk+1:=rk+1+βkpagkk:=k+1fin de repeticióndevolver incógnitak+1 como resultado{\displaystyle {\begin{aligned}&\mathbf {r} _{0}:=\mathbf {b} -\mathbf {Ax} _{0}\\&{\hbox{if }}\mathbf {r} _{0}{\text{ is sufficiently small, then return }}\mathbf {x} _{0}{\text{ as the result}}\\&\mathbf {p} _{0}:=\mathbf {r} _{0}\\&k:=0\\&{\text{repeat}}\\&\qquad \alpha _{k}:={\frac {\mathbf {r} _{k}^{\mathsf {T}}\mathbf {r} _{k}}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {Ap} _{k}}}\\&\qquad \mathbf {x} _{k+1}:=\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k}\\&\qquad \mathbf {r} _{k+1}:=\mathbf {r} _{k}-\alpha _{k}\mathbf {Ap} _{k}\\&\qquad {\hbox{if }}\mathbf {r} _{k+1}{\text{ is sufficiently small, then exit loop}}\\&\qquad \beta _{k}:={\frac {\mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {r} _{k+1}}{\mathbf {r} _{k}^{\mathsf {T}}\mathbf {r} _{k}}}\\&\qquad \mathbf {p} _{k+1}:=\mathbf {r} _{k+1}+\beta _{k}\mathbf {p} _{k}\\&\qquad k:=k+1\\&{\text{end repeat}}\\&{\text{return }}\mathbf {x} _{k+1}{\text{ as the result}}\end{aligned}}}

Este es el algoritmo más utilizado. La misma fórmula paraβk{\displaystyle \beta _{k}}También se utiliza en el método de gradiente conjugado no lineal de Fletcher-Reeves .

Reinicios

Observamos queincógnita1{\displaystyle \mathbf {x} _{1}}se calcula mediante el método de descenso de gradiente aplicado aincógnita0{\displaystyle \mathbf {x} _{0}}. Configuraciónβk=0{\displaystyle \beta _{k}=0}haría de manera similarincógnitak+1{\displaystyle \mathbf {x} _{k+1}}calculado mediante el método de descenso de gradiente desdeincógnitak{\displaystyle \mathbf {x} _{k}}, es decir, puede utilizarse como una implementación simple de un reinicio de las iteraciones del gradiente conjugado. [ 4 ] Los reinicios podrían ralentizar la convergencia, pero pueden mejorar la estabilidad si el método del gradiente conjugado se comporta mal, por ejemplo, debido a un error de redondeo .

Cálculo explícito de residuos

Las fórmulasincógnitak+1:=incógnitak+αkpagk{\displaystyle \mathbf {x} _{k+1}:=\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k}}yrk:=bAincógnitak{\displaystyle \mathbf {r} _{k}:=\mathbf {b} -\mathbf {Ax} _{k}}, que ambas se cumplen en aritmética exacta, hacen que las fórmulasrk+1:=rkαkApagk{\displaystyle \mathbf {r} _{k+1}:=\mathbf {r} _{k}-\alpha _{k}\mathbf {Ap} _{k}}yrk+1:=bAincógnitak+1{\displaystyle \mathbf {r} _{k+1}:=\mathbf {b} -\mathbf {Ax} _{k+1}}matemáticamente equivalentes. El primero se utiliza en el algoritmo para evitar una multiplicación adicional porA{\displaystyle \mathbf {A} }ya que el vectorApagk{\displaystyle \mathbf {Ap} _{k}}ya se calcula para evaluarαk{\displaystyle \alpha _{k}}. Este último puede ser más preciso, sustituyendo el cálculo explícito.rk+1:=bAincógnitak+1{\displaystyle \mathbf {r} _{k+1}:=\mathbf {b} -\mathbf {Ax} _{k+1}}para la implícita por la recursión sujeta a acumulación de errores de redondeo , y por lo tanto se recomienda para una evaluación ocasional. [ 8 ]

La norma del residuo se utiliza normalmente como criterio de parada. La norma del residuo explícitork+1:=bAincógnitak+1{\displaystyle \mathbf {r} _{k+1}:=\mathbf {b} -\mathbf {Ax} _{k+1}}proporciona un nivel de precisión garantizado tanto en aritmética exacta como en presencia de errores de redondeo , donde la convergencia se estanca naturalmente. En contraste, el residuo implícitork+1:=rkαkApagk{\displaystyle \mathbf {r} _{k+1}:=\mathbf {r} _{k}-\alpha _{k}\mathbf {Ap} _{k}}Se sabe que su amplitud sigue disminuyendo muy por debajo del nivel de los errores de redondeo y, por lo tanto, no se puede utilizar para determinar el estancamiento de la convergencia.

Cálculo de alfa y beta

En el algoritmo,αk{\displaystyle \alpha _{k}}se elige de tal manera querk+1{\displaystyle \mathbf {r} _{k+1}}es ortogonal ark{\displaystyle \mathbf {r} _{k}}. El denominador se simplifica a partir de

αk=rkTrkrkTApagk=rkTrkpagkTApagk{\displaystyle \alpha _{k}={\frac {\mathbf {r} _{k}^{\mathsf {T}}\mathbf {r} _{k}}{\mathbf {r} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}}}={\frac {\mathbf {r} _{k}^{\mathsf {T}}\mathbf {r} _{k}}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {Ap} _{k}}}}

desderk+1=pagk+1βkpagk{\displaystyle \mathbf {r} _{k+1}=\mathbf {p} _{k+1}-\mathbf {\beta } _{k}\mathbf {p} _{k}}. Elβk{\displaystyle \beta _{k}}se elige de tal manera quepagk+1{\displaystyle \mathbf {p} _{k+1}}es conjugado depagk{\displaystyle \mathbf {p} _{k}}. Inicialmente,βk{\displaystyle \beta _{k}}es

βk=rk+1TApagkpagkTApagk{\displaystyle \beta _{k}=-{\frac {\mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}}}}

usando

rk+1=rkαkApagk{\displaystyle \mathbf {r} _{k+1}=\mathbf {r} _{k}-\alpha _{k}\mathbf {A} \mathbf {p} _{k}}

y equivalentemente

Apagk=1αk(rkrk+1),{\displaystyle \mathbf {A} \mathbf {p} _{k}={\frac {1}{\alpha _{k}}}(\mathbf {r} _{k}-\mathbf {r} _{k+1}),}

el numerador deβk{\displaystyle \beta _{k}}se reescribe como

rk+1TApagk=1αkrk+1T(rkrk+1)=1αkrk+1Trk+1{\displaystyle \mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}={\frac {1}{\alpha _{k}}}\mathbf {r} _{k+1}^{\mathsf {T}}(\mathbf {r} _{k}-\mathbf {r} _{k+1})=-{\frac {1}{\alpha _{k}}}\mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {r} _{k+1}}

porquerk+1{\displaystyle \mathbf {r} _{k+1}}yrk{\displaystyle \mathbf {r} _{k}}son ortogonales por diseño. El denominador se reescribe como

pagkTApagk=(rk+βk1pagk1)TApagk=1αkrkT(rkrk+1)=1αkrkTrk{\displaystyle \mathbf {p} _{k}^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}=(\mathbf {r} _{k}+\beta _{k-1}\mathbf {p} _{k-1})^{\mathsf {T}}\mathbf {A} \mathbf {p} _{k}={\frac {1}{\alpha _{k}}}\mathbf {r} _{k}^{\mathsf {T}}(\mathbf {r} _{k}-\mathbf {r} _{k+1})={\frac {1}{\alpha _{k}}}\mathbf {r} _{k}^{\mathsf {T}}\mathbf {r} _{k}}

utilizando esas direcciones de búsquedapagk{\displaystyle \mathbf {p} _{k}}son conjugados y nuevamente que los residuos son ortogonales. Esto da como resultado elβ{\displaystyle \beta }en el algoritmo después de cancelarαk{\displaystyle \alpha _{k}}.

Código de ejemplo en Julia (lenguaje de programación)

utilizando álgebra lineal""" x = gradiente_conjugado(A, b, x0 = cero(b); atol=longitud(b)*eps(norma(b))Devuelve la solución de `A * x = b` utilizando el método del gradiente conjugado.`A` debe ser una matriz definida positiva u otro operador lineal.`x0` es la estimación inicial para la solución (por defecto es el vector cero).`atol` es la tolerancia absoluta en la magnitud del residuo `b - A * x`.para convergencia (el valor predeterminado es épsilon de máquina).Devuelve el vector de solución aproximada `x`."""función gradiente_conjugado (A , b :: AbstractVector , x0 :: AbstractVector = zero ( b ); atol = length ( b ) * eps ( norm ( b )))x = copiar ( x0 ) # inicializar la soluciónr = b - A * x0 # residuo inicialp = copiar ( r ) # dirección de búsqueda inicialr²old = r ' * r # norma al cuadrado del residuok = 0mientras r²old > atol ^ 2 # iterar hasta la convergenciaAp = A * p # dirección de búsquedaα = r²old / ( p ' * Ap ) # tamaño del paso@. x += α * p # actualizar solución# Actualizar residuo:Si ( k + 1 ) % 16 == 0 # cada 16 iteraciones, recalcular el residuo desde ceror .= b .- A * x # para evitar la acumulación de errores numéricosdemás@. r -= α * Ap # utiliza la fórmula de actualización que ahorra un producto matriz-vectorfinr²nuevo = r ' * r@. p = r + ( r²nuevo / r²antiguo ) * p # actualizar la dirección de búsquedar²old = r²new # actualiza la norma residual al cuadradok += 1findevolver xfin

Código de ejemplo en MATLAB

función x = gradiente_conjugado ( A, b, x0, tol )% Devuelve la solución de `A * x = b` utilizando el método del gradiente conjugado.% Recordatorio: A debe ser simétrica y definida positiva.si nargin < 4tol = eps ;finr = b - A * x0 ;p = r ;rsold = r ' * r ;x = x0 ;mientras sqrt ( rsold ) > tolAp = A * p ;alfa = rsold / ( p ' * Ap );x = x + alfa * p ;r = r - alfa * Ap ;rsnew = r ' * r ;p = r + ( rsnew / rsold ) * p ;rsold = rsnew ;finfin

Ejemplo numérico

Consideremos el sistema lineal Ax = b dado por

Aincógnita=[4113][incógnita1incógnita2]=[12],{\displaystyle \mathbf {A} \mathbf {x} ={\begin{bmatrix}4&1\\1&3\end{bmatrix}}{\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix}}={\begin{bmatrix}1\\2\end{bmatrix}},}

Realizaremos dos pasos del método del gradiente conjugado comenzando con la estimación inicial.

incógnita0=[21]{\displaystyle \mathbf {x} _{0}={\begin{bmatrix}2\\1\end{bmatrix}}}

para encontrar una solución aproximada al sistema.

Solución

Para referencia, la solución exacta es

incógnita=[111711][0,09090,6364]{\displaystyle \mathbf {x} ={\begin{bmatrix}{\frac {1}{11}}\\\\{\frac {7}{11}}\end{bmatrix}}\approx {\begin{bmatrix}0.0909\\\\0.6364\end{bmatrix}}}

Nuestro primer paso es calcular el vector residual r 0 asociado con x 0 . Este residuo se calcula a partir de la fórmula r 0 = b - Ax 0 , y en nuestro caso es igual a

r0=[12][4113][21]=[83]=pag0.{\displaystyle \mathbf {r} _{0}={\begin{bmatrix}1\\2\end{bmatrix}}-{\begin{bmatrix}4&1\\1&3\end{bmatrix}}{\begin{bmatrix}2\\1\end{bmatrix}}={\begin{bmatrix}-8\\-3\end{bmatrix}}=\mathbf {p} _{0}.}

Dado que esta es la primera iteración, utilizaremos el vector residual r 0 como nuestra dirección de búsqueda inicial p 0 ; el método de selección de p k cambiará en iteraciones posteriores.

Ahora calculamos el escalar α 0 usando la relación

α0=r0Tr0pag0TApag0=[83][83][83][4113][83]=733310,2205{\displaystyle \alpha _{0}={\frac {\mathbf {r} _{0}^{\mathsf {T}}\mathbf {r} _{0}}{\mathbf {p} _{0}^{\mathsf {T}}\mathbf {Ap} _{0}}}={\frac {{\begin{bmatrix}-8&-3\end{bmatrix}}{\begin{bmatrix}-8\\-3\end{bmatrix}}}{{\begin{bmatrix}-8&-3\end{bmatrix}}{\begin{bmatrix}4&1\\1&3\end{bmatrix}}{\begin{bmatrix}-8\\-3\end{bmatrix}}}}={\frac {73}{331}}\approx 0.2205}

Ahora podemos calcular x 1 usando la fórmula

incógnita1=incógnita0+α0pag0=[21]+73331[83][0,23560,3384].{\displaystyle \mathbf {x} _{1}=\mathbf {x} _{0}+\alpha _{0}\mathbf {p} _{0}={\begin{bmatrix}2\\1\end{bmatrix}}+{\frac {73}{331}}{\begin{bmatrix}-8\\-3\end{bmatrix}}\approx {\begin{bmatrix}0.2356\\0.3384\end{bmatrix}}.}

Este resultado completa la primera iteración, siendo el resultado una solución aproximada "mejorada" para el sistema, x 1 . Ahora podemos continuar y calcular el siguiente vector residual r 1 usando la fórmula

r1=r0α0Apag0=[83]73331[4113][83][0,28100,7492].{\displaystyle \mathbf {r} _{1}=\mathbf {r} _{0}-\alpha _{0}\mathbf {A} \mathbf {p} _{0}={\begin{bmatrix}-8\\-3\end{bmatrix}}-{\frac {73}{331}}{\begin{bmatrix}4&1\\1&3\end{bmatrix}}{\begin{bmatrix}-8\\-3\end{bmatrix}}\approx {\begin{bmatrix}-0.2810\\0.7492\end{bmatrix}}.}

Nuestro siguiente paso en el proceso es calcular el escalar β 0 que eventualmente se utilizará para determinar la siguiente dirección de búsqueda p 1 .

β0=r1Tr1r0Tr0[0,28100,7492][0,28100,7492][83][83]=0,0088.{\displaystyle \beta _{0}={\frac {\mathbf {r} _{1}^{\mathsf {T}}\mathbf {r} _{1}}{\mathbf {r} _{0}^{\mathsf {T}}\mathbf {r} _{0}}}\approx {\frac {{\begin{bmatrix}-0.2810&0.7492\end{bmatrix}}{\begin{bmatrix}-0.2810\\0.7492\end{bmatrix}}}{{\begin{bmatrix}-8&-3\end{bmatrix}}{\begin{bmatrix}-8\\-3\end{bmatrix}}}}=0.0088.}

Ahora, usando este escalar β 0 , podemos calcular la siguiente dirección de búsqueda p 1 usando la relación

pag1=r1+β0pag0[0,28100,7492]+0,0088[83]=[0,35110,7229].{\displaystyle \mathbf {p} _{1}=\mathbf {r} _{1}+\beta _{0}\mathbf {p} _{0}\approx {\begin{bmatrix}-0.2810\\0.7492\end{bmatrix}}+0.0088{\begin{bmatrix}-8\\-3\end{bmatrix}}={\begin{bmatrix}-0.3511\\0.7229\end{bmatrix}}.}

Ahora calculamos el escalar α 1 usando nuestro p 1 recién adquirido usando el mismo método que se usó para α 0 .

α1=r1Tr1pag1TApag1[0,28100,7492][0,28100,7492][0,35110,7229][4113][0,35110,7229]=0,4122.{\displaystyle \alpha _{1}={\frac {\mathbf {r} _{1}^{\mathsf {T}}\mathbf {r} _{1}}{\mathbf {p} _{1}^{\mathsf {T}}\mathbf {Ap} _{1}}}\approx {\frac {{\begin{bmatrix}-0.2810&0.7492\end{bmatrix}}{\begin{bmatrix}-0.2810\\0.7492\end{bmatrix}}}{{\begin{bmatrix}-0.3511&0.7229\end{bmatrix}}{\begin{bmatrix}4&1\\1&3\end{bmatrix}}{\begin{bmatrix}-0.3511\\0.7229\end{bmatrix}}}}=0.4122.}

Finalmente, encontramos x 2 usando el mismo método que se usó para encontrar x 1 .

incógnita2=incógnita1+α1pag1[0,23560,3384]+0,4122[0,35110,7229]=[0,09090,6364].{\displaystyle \mathbf {x} _{2}=\mathbf {x} _{1}+\alpha _{1}\mathbf {p} _{1}\approx {\begin{bmatrix}0.2356\\0.3384\end{bmatrix}}+0.4122{\begin{bmatrix}-0.3511\\0.7229\end{bmatrix}}={\begin{bmatrix}0.0909\\0.6364\end{bmatrix}}.}

El resultado, x 2 , es una aproximación "mejor" a la solución del sistema que x 1 y x 0 . Si en este ejemplo se utilizara aritmética exacta en lugar de precisión limitada, teóricamente se habría alcanzado la solución exacta después de n = 2 iteraciones ( siendo n el orden del sistema).

Propiedad de terminación finita

Con aritmética exacta, el número de iteraciones necesarias no supera el orden de la matriz. Este comportamiento se conoce como la propiedad de terminación finita del método del gradiente conjugado. Se refiere a la capacidad del método para alcanzar la solución exacta de un sistema lineal en un número finito de pasos —como máximo igual a la dimensión del sistema— cuando se utiliza aritmética exacta. Esta propiedad surge del hecho de que, en cada iteración, el método genera un vector residual ortogonal a todos los residuos anteriores. Estos residuos forman un conjunto mutuamente ortogonal.

En un espacio n -dimensional, es imposible construir más de n vectores linealmente independientes y mutuamente ortogonales, a menos que uno de ellos sea el vector cero. Por lo tanto, una vez que aparece un residuo cero, el método ha alcanzado la solución y debe finalizar. Esto garantiza que el método del gradiente conjugado converja en un máximo de n pasos.

Para demostrar esto, consideremos el sistema:

A=[3224],b=[11]{\displaystyle A={\begin{bmatrix}3&-2\\-2&4\end{bmatrix}},\quad \mathbf {b} ={\begin{bmatrix}1\\1\end{bmatrix}}}

Partimos de una suposición inicial.incógnita0=[12]{\displaystyle \mathbf {x} _{0}={\begin{bmatrix}1\\2\end{bmatrix}}}. DesdeA{\displaystyle A}Si la ecuación es simétrica definida positiva y el sistema es bidimensional, el método del gradiente conjugado debería encontrar la solución exacta en no más de dos pasos. El siguiente código de MATLAB demuestra este comportamiento:

A = [ 3 , - 2 ; - 2 , 4 ]; x_true = [ 1 ; 1 ]; b = A * x_true ;x = [ 1 ; 2 ]; % estimación inicial r = b - A * x ; p = r ;para k = 1 : 2 Ap = A * p ; alpha = ( r ' * r ) / ( p ' * Ap ); x = x + alpha * p ; r_new = r - alpha * Ap ; beta = ( r_new ' * r_new ) / ( r ' * r ); p = r_new + beta * p ; r = r_new ; findisp ( 'Solución exacta:' ); disp ( x );

La salida confirma que el método alcanza[11]{\displaystyle {\begin{bmatrix}1\\1\end{bmatrix}}}Tras dos iteraciones, se obtuvo un resultado consistente con la predicción teórica. Este ejemplo ilustra cómo el método del gradiente conjugado se comporta como un método directo en condiciones idealizadas.

Aplicación a sistemas dispersos

La propiedad de terminación finita también tiene implicaciones prácticas en la resolución de grandes sistemas dispersos, que surgen con frecuencia en aplicaciones científicas y de ingeniería. Por ejemplo, la discretización de la ecuación de Laplace bidimensional.2=0{\displaystyle \nabla ^{2}u=0}El uso de diferencias finitas en una cuadrícula uniforme conduce a un sistema lineal disperso.Aincógnita=b{\displaystyle A\mathbf {x} =\mathbf {b} }, dóndeA{\displaystyle A}es simétrica y definida positiva.

Usando un5×5{\displaystyle 5\times 5}La cuadrícula interior produce una25×25{\displaystyle 25\times 25}sistema y la matriz de coeficientesA{\displaystyle A}tiene un patrón de plantilla de cinco puntos. Cada fila deA{\displaystyle A}Contiene como máximo cinco entradas distintas de cero que corresponden al punto central y sus vecinos inmediatos. Por ejemplo, la matriz generada a partir de dicha cuadrícula podría tener el siguiente aspecto:

A=[41010141000141001014100014]{\displaystyle A={\begin{bmatrix}4&-1&0&\cdots &-1&0&\cdots \\-1&4&-1&\cdots &0&0&\cdots \\0&-1&4&-1&0&0&\cdots \\\vdots &\vdots &\ddots &\ddots &\ddots &\vdots \\-1&0&\cdots &-1&4&-1&\cdots \\0&0&\cdots &0&-1&4&\cdots \\\vdots &\vdots &\cdots &\cdots &\cdots &\ddots \end{bmatrix}}}

Aunque la dimensión del sistema es 25, el método del gradiente conjugado garantiza teóricamente la finalización en un máximo de 25 iteraciones con aritmética exacta. En la práctica, la convergencia suele producirse en muchos menos pasos debido a las propiedades espectrales de la matriz. Esta eficiencia hace que el método del gradiente conjugado sea particularmente atractivo para resolver sistemas a gran escala derivados de ecuaciones diferenciales parciales, como las que se encuentran en la conducción del calor, la dinámica de fluidos y la electrostática.

Propiedades de convergencia

En teoría, el método del gradiente conjugado puede considerarse un método directo, ya que, en ausencia de errores de redondeo, produce la solución exacta tras un número finito de iteraciones, que no supera el tamaño de la matriz. En la práctica, nunca se obtiene la solución exacta, puesto que el método del gradiente conjugado es inestable incluso ante pequeñas perturbaciones; por ejemplo, la mayoría de las direcciones no son conjugadas en la práctica, debido a la naturaleza degenerativa de la generación de los subespacios de Krylov.

Como método iterativo , el método del gradiente conjugado mejora monótonamente (en la norma de energía) las aproximaciones.incógnitak{\displaystyle \mathbf {x} _{k}}a la solución exacta y puede alcanzar la tolerancia requerida después de un número relativamente pequeño (en comparación con el tamaño del problema) de iteraciones. La mejora suele ser lineal y su velocidad está determinada por el número de condición.κ(A){\displaystyle \kappa (A)}de la matriz del sistemaA{\displaystyle A}: el más grandeκ(A){\displaystyle \kappa (A)}es, cuanto más lenta sea la mejora. [ 9 ]

Sin embargo, surge un caso interesante cuando los valores propios están espaciados logarítmicamente para una matriz simétrica grande. Por ejemplo, seaA=QDQT{\displaystyle A=QDQ^{T}}dóndeQ{\displaystyle Q}es una matriz ortogonal aleatoria yD{\displaystyle D}es una matriz diagonal con valores propios que van desdeλnorte=1{\displaystyle \lambda _{n}=1}aλ1=106{\displaystyle \lambda _{1}=10^{6}}, espaciados logarítmicamente. A pesar de la propiedad de terminación finita de CGM, donde teóricamente se debería alcanzar la solución exacta en como máximonorte{\displaystyle n}pasos, el método puede mostrar estancamiento en la convergencia. En tal escenario, incluso después de muchas más iteraciones, por ejemplo, diez veces el tamaño de la matriz, el error puede disminuir solo modestamente (por ejemplo, a105{\displaystyle 10^{-5}}). Además, el error iterativo puede oscilar significativamente, lo que lo hace poco fiable como condición de parada. Esta mala convergencia no se explica solo por el número de condición (por ejemplo,κ2(A)=106{\displaystyle \kappa _{2}(A)=10^{6}}), sino más bien por la propia distribución de los valores propios. Cuando los valores propios están más uniformemente espaciados o distribuidos aleatoriamente, estos problemas de convergencia suelen estar ausentes, lo que pone de relieve que el rendimiento de CGM no solo depende deκ(A){\displaystyle \kappa (A)}pero también sobre cómo se distribuyen los valores propios. [ 10 ]

Siκ(A){\displaystyle \kappa (A)}es grande, el preacondicionamiento se usa comúnmente para reemplazar el sistema originalAincógnitab=0{\displaystyle \mathbf {Ax} -\mathbf {b} =0}conMETRO1(Aincógnitab)=0{\displaystyle \mathbf {M} ^{-1}(\mathbf {Ax} -\mathbf {b} )=0}de tal manera queκ(METRO1A){\displaystyle \kappa (\mathbf {M} ^{-1}\mathbf {A} )}es más pequeño queκ(A){\displaystyle \kappa (\mathbf {A} )}, vea abajo.

Teorema de convergencia

Definir un subconjunto de polinomios como

Πk:={ pagΠk : pag(0)=1 },{\displaystyle \Pi _{k}^{*}:=\left\lbrace \ p\in \Pi _{k}\ :\ p(0)=1\ \right\rbrace \,,}

dóndeΠk{\displaystyle \Pi _{k}}es el conjunto de polinomios de grado máximok{\displaystyle k}.

Dejar(incógnitak)k{\displaystyle \left(\mathbf {x} _{k}\right)_{k}}sean las aproximaciones iterativas de la solución exactaincógnita{\displaystyle \mathbf {x} _{*}}y definir los errores comomik:=incógnitakincógnita{\displaystyle \mathbf {e} _{k}:=\mathbf {x} _{k}-\mathbf {x} _{*}}Ahora, la tasa de convergencia se puede aproximar como [ 4 ] [ 11 ]

mikA=minpagΠkpag(A)mi0AminpagΠkmáximoλσ(A)|pag(λ)| mi0A2(κ(A)1κ(A)+1)k mi0A2exp(2kκ(A)) mi0A,{\displaystyle {\begin{aligned}\left\|\mathbf {e} _{k}\right\|_{\mathbf {A} }&=\min _{p\in \Pi _{k}^{*}}\left\|p(\mathbf {A} )\mathbf {e} _{0}\right\|_{\mathbf {A} }\\&\leq \min _{p\in \Pi _{k}^{*}}\,\max _{\lambda \in \sigma (\mathbf {A} )}|p(\lambda )|\ \left\|\mathbf {e} _{0}\right\|_{\mathbf {A} }\\&\leq 2\left({\frac {{\sqrt {\kappa (\mathbf {A} )}}-1}{{\sqrt {\kappa (\mathbf {A} )}}+1}}\right)^{k}\ \left\|\mathbf {e} _{0}\right\|_{\mathbf {A} }\\&\leq 2\exp \left({\frac {-2k}{\sqrt {\kappa (\mathbf {A} )}}}\right)\ \left\|\mathbf {e} _{0}\right\|_{\mathbf {A} }\,,\end{aligned}}}

dóndeσ(A){\displaystyle \sigma (\mathbf {A} )}denota el espectro yκ(A){\displaystyle \kappa (\mathbf {A} )}denota el número de condición .

Esto muestrak=12κ(A)registro(mi0Aε1){\displaystyle k={\tfrac {1}{2}}{\sqrt {\kappa (\mathbf {A} )}}\log \left(\left\|\mathbf {e} _{0}\right\|_{\mathbf {A} }\varepsilon ^{-1}\right)}Las iteraciones son suficientes para reducir el error a2ε{\displaystyle 2\varepsilon }para cualquierε>0{\displaystyle \varepsilon >0}.

Tenga en cuenta el límite importante cuandoκ(A){\displaystyle \kappa (\mathbf {A} )}tiende a{\displaystyle \infty }

κ(A)1κ(A)+112κ(A)paraκ(A)1.{\displaystyle {\frac {{\sqrt {\kappa (\mathbf {A} )}}-1}{{\sqrt {\kappa (\mathbf {A} )}}+1}}\approx 1-{\frac {2}{\sqrt {\kappa (\mathbf {A} )}}}\quad {\text{for}}\quad \kappa (\mathbf {A} )\gg 1\,.}

Este límite muestra una tasa de convergencia más rápida en comparación con los métodos iterativos de Jacobi o Gauss-Seidel que escalan como12κ(A){\displaystyle \approx 1-{\frac {2}{\kappa (\mathbf {A} )}}}.

En el teorema de convergencia no se asume ningún error de redondeo , pero la cota de convergencia suele ser válida en la práctica como lo explica teóricamente [ 5 ] Anne Greenbaum .

Convergencia práctica

Si se inicializa aleatoriamente, la primera etapa de iteraciones suele ser la más rápida, ya que el error se elimina dentro del subespacio de Krylov que inicialmente refleja un número de condición efectivo menor. La segunda etapa de convergencia suele estar bien definida por el límite de convergencia teórico conκ(A){\textstyle {\sqrt {\kappa (\mathbf {A} )}}}, pero puede ser superlineal, dependiendo de una distribución del espectro de la matrizA{\displaystyle A}y la distribución espectral del error. [ 5 ] En la última etapa, se alcanza la precisión mínima alcanzable y la convergencia se detiene o el método puede incluso comenzar a divergir. En aplicaciones típicas de computación científica en formato de punto flotante de doble precisión para matrices de gran tamaño, el método del gradiente conjugado utiliza un criterio de parada con una tolerancia que finaliza las iteraciones durante la primera o segunda etapa.

El método del gradiente conjugado preacondicionado

En la mayoría de los casos, el preacondicionamiento es necesario para asegurar una convergencia rápida del método del gradiente conjugado. SiMETRO1{\displaystyle \mathbf {M} ^{-1}}es simétrica definida positiva yMETRO1A{\displaystyle \mathbf {M} ^{-1}\mathbf {A} }tiene un mejor número de condición queA,{\displaystyle \mathbf {A} ,}Se puede utilizar un método de gradiente conjugado precondicionado. Tiene la siguiente forma: [ 12 ]

r0:=bAincógnita0{\displaystyle \mathbf {r} _{0}:=\mathbf {b} -\mathbf {Ax} _{0}}
Resolver:METROz0:=r0{\displaystyle {\textrm {Solve:}}\mathbf {M} \mathbf {z} _{0}:=\mathbf {r} _{0}}
pag0:=z0{\displaystyle \mathbf {p} _{0}:=\mathbf {z} _{0}}
k:=0{\displaystyle k:=0\,}
repetir
αk:=rkTzkpagkTApagk{\displaystyle \alpha _{k}:={\frac {\mathbf {r} _{k}^{\mathsf {T}}\mathbf {z} _{k}}{\mathbf {p} _{k}^{\mathsf {T}}\mathbf {Ap} _{k}}}}
incógnitak+1:=incógnitak+αkpagk{\displaystyle \mathbf {x} _{k+1}:=\mathbf {x} _{k}+\alpha _{k}\mathbf {p} _{k}}
rk+1:=rkαkApagk{\displaystyle \mathbf {r} _{k+1}:=\mathbf {r} _{k}-\alpha _{k}\mathbf {Ap} _{k}}
Si r k +1 es suficientemente pequeño, entonces salir del bucle. Fin del bucle.
Solvmi METROzk+1:=rk+1{\displaystyle \mathrm {Solve} \ \mathbf {M} \mathbf {z} _{k+1}:=\mathbf {r} _{k+1}}
βk:=rk+1Tzk+1rkTzk{\displaystyle \beta _{k}:={\frac {\mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {z} _{k+1}}{\mathbf {r} _{k}^{\mathsf {T}}\mathbf {z} _{k}}}}
pagk+1:=zk+1+βkpagk{\displaystyle \mathbf {p} _{k+1}:=\mathbf {z} _{k+1}+\beta _{k}\mathbf {p} _{k}}
k:=k+1{\displaystyle k:=k+1\,}
fin de repetición
El resultado es x k +1

La formulación anterior es equivalente a aplicar el método del gradiente conjugado regular al sistema preacondicionado [ 13 ].

mi1A(mi1)Tincógnita^=mi1b{\displaystyle \mathbf {E} ^{-1}\mathbf {A} (\mathbf {E} ^{-1})^{\mathsf {T}}\mathbf {\hat {x}} =\mathbf {E} ^{-1}\mathbf {b} }

dónde

mimiT=METRO,incógnita^=miTincógnita.{\displaystyle \mathbf {EE} ^{\mathsf {T}}=\mathbf {M} ,\qquad \mathbf {\hat {x}} =\mathbf {E} ^{\mathsf {T}}\mathbf {x} .}

La descomposición de Cholesky del precondicionador debe utilizarse para mantener la simetría (y la positividad definida) del sistema. Sin embargo, no es necesario calcular esta descomposición, y basta con saberMETRO1{\displaystyle \mathbf {M} ^{-1}}Se puede demostrar quemi1A(mi1)T{\displaystyle \mathbf {E} ^{-1}\mathbf {A} (\mathbf {E} ^{-1})^{\mathsf {T}}}tiene el mismo espectro queMETRO1A{\displaystyle \mathbf {M} ^{-1}\mathbf {A} }.

La matriz de preacondicionamientoMETRO{\displaystyle \mathbf {M} }Debe ser simétrica, definida positiva y fija, es decir, no puede cambiar de una iteración a otra. Si se incumple alguna de estas condiciones sobre el precondicionador, el comportamiento del método del gradiente conjugado precondicionado puede volverse impredecible.

Un ejemplo de precondicionador comúnmente utilizado es la factorización de Cholesky incompleta . [ 14 ]

Uso práctico del preacondicionador

Es importante tener en cuenta que no queremos invertir la matriz.METRO{\displaystyle \mathbf {M} }explícitamente para obtenerMETRO1{\displaystyle \mathbf {M} ^{-1}}para su uso en el proceso, ya que la inversiónMETRO{\displaystyle \mathbf {M} }requeriría más tiempo/recursos computacionales que resolver el algoritmo del gradiente conjugado en sí. Como ejemplo, supongamos que estamos utilizando un precondicionador proveniente de la factorización de Cholesky incompleta. La matriz resultante es la matriz triangular inferior.L{\displaystyle \mathbf {L} }y la matriz de preacondicionamiento es:

METRO=LLT{\displaystyle \mathbf {M} =\mathbf {LL} ^{\mathsf {T}}}

Entonces tenemos que resolver:

METROz=r{\displaystyle \mathbf {Mz} =\mathbf {r} }

z=METRO1r{\displaystyle \mathbf {z} =\mathbf {M} ^{-1}\mathbf {r} }

Pero:

METRO1=(L1)TL1{\displaystyle \mathbf {M} ^{-1}=(\mathbf {L} ^{-1})^{\mathsf {T}}\mathbf {L} ^{-1}}

Entonces:

z=(L1)TL1r{\displaystyle \mathbf {z} =(\mathbf {L} ^{-1})^{\mathsf {T}}\mathbf {L} ^{-1}\mathbf {r} }

Tomemos un vector intermedio.a{\displaystyle \mathbf {a} }:

a=L1r{\displaystyle \mathbf {a} =\mathbf {L} ^{-1}\mathbf {r} }

r=La{\displaystyle \mathbf {r} =\mathbf {L} \mathbf {a} }

Desder{\displaystyle \mathbf {r} }yL{\displaystyle \mathbf {L} }y conocido, yL{\displaystyle \mathbf {L} }es triangular inferior, resolviendo paraa{\displaystyle \mathbf {a} }es fácil y computacionalmente económico mediante la sustitución hacia adelante . Luego, sustituimosa{\displaystyle \mathbf {a} }en la ecuación original:

z=(L1)Ta{\displaystyle \mathbf {z} =(\mathbf {L} ^{-1})^{\mathsf {T}}\mathbf {a} }

a=LTz{\displaystyle \mathbf {a} =\mathbf {L} ^{\mathsf {T}}\mathbf {z} }

Desdea{\displaystyle \mathbf {a} }yLT{\displaystyle \mathbf {L} ^{\mathsf {T}}}son conocidos yLT{\displaystyle \mathbf {L} ^{\mathsf {T}}}es triangular superior, resolviendo paraz{\displaystyle \mathbf {z} }es fácil y computacionalmente económico mediante el uso de sustitución hacia atrás .

Utilizando este método, no es necesario invertir.METRO{\displaystyle \mathbf {M} }oL{\displaystyle \mathbf {L} }explícitamente en absoluto, y aún así obtenemosz{\displaystyle \mathbf {z} }.

El método de gradiente conjugado preacondicionado flexible

En aplicaciones numéricamente complejas, se utilizan precondicionadores sofisticados, lo que puede dar lugar a un precondicionamiento variable, que cambia entre iteraciones. Incluso si el precondicionador es simétrico definido positivo en cada iteración, el hecho de que pueda cambiar invalida los argumentos anteriores y, en pruebas prácticas, provoca una ralentización significativa de la convergencia del algoritmo presentado anteriormente. Utilizando la fórmula de Polak-Ribière

βk:=rk+1T(zk+1zk)rkTzk{\displaystyle \beta _{k}:={\frac {\mathbf {r} _{k+1}^{\mathsf {T}}\left(\mathbf {z} _{k+1}-\mathbf {z} _{k}\right)}{\mathbf {r} _{k}^{\mathsf {T}}\mathbf {z} _{k}}}}

en lugar de la fórmula de Fletcher-Reeves

βk:=rk+1Tzk+1rkTzk{\displaystyle \beta _{k}:={\frac {\mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {z} _{k+1}}{\mathbf {r} _{k}^{\mathsf {T}}\mathbf {z} _{k}}}}

puede mejorar drásticamente la convergencia en este caso. [ 15 ] Esta versión del método del gradiente conjugado precondicionado puede llamarse [ 16 ] flexible , ya que permite un precondicionamiento variable. También se ha demostrado [ 17 ] que la versión flexible es robusta incluso si el precondicionador no es simétrico definido positivo (SPD).

La implementación de la versión flexible requiere almacenar un vector adicional. Para un precondicionador SPD fijo,rk+1Tzk=0,{\displaystyle \mathbf {r} _{k+1}^{\mathsf {T}}\mathbf {z} _{k}=0,}por lo tanto, ambas fórmulas para β k son equivalentes en aritmética exacta, es decir, sin el error de redondeo .

La explicación matemática del mejor comportamiento de convergencia del método con la fórmula de Polak-Ribière es que el método es localmente óptimo en este caso; en particular, no converge más lentamente que el método de descenso más pronunciado localmente óptimo. [ 18 ]

Frente al método de descenso más pronunciado localmente óptimo

En ambos métodos de gradiente conjugado, el original y el precondicionado, solo es necesario establecer βk:=0{\displaystyle \beta _{k}:=0}Para optimizarlos localmente, se utilizan métodos de búsqueda lineal y descenso más pronunciado . Con esta sustitución, los vectores p son siempre iguales a los vectores z , por lo que no es necesario almacenar los vectores p . Por lo tanto, cada iteración de estos métodos de descenso más pronunciado es un poco más económica que la de los métodos de gradiente conjugado. Sin embargo, estos últimos convergen más rápido, a menos que se utilice un precondicionador (altamente) variable y/o que no sea SPD ( véase más arriba).

Método del gradiente conjugado como controlador de retroalimentación óptimo para integrador doble.

El método del gradiente conjugado también se puede derivar utilizando la teoría de control óptimo . [ 19 ] En este enfoque, el método del gradiente conjugado resulta ser un controlador de retroalimentación óptimo .=k(incógnita,v):=γaF(incógnita)γbv{\displaystyle u=k(x,v):=-\gamma _{a}\nabla f(x)-\gamma _{b}v}para el sistema de doble integrador ,incógnita˙=v,v˙={\displaystyle {\dot {x}}=v,\quad {\dot {v}}=u}Las cantidadesγa{\displaystyle \gamma _{a}}yγb{\displaystyle \gamma _{b}}son ganancias de retroalimentación variables. [ 19 ]

Gradiente conjugado en las ecuaciones normales

El método del gradiente conjugado se puede aplicar a una matriz arbitraria de n por m aplicándolo a las ecuaciones normales A T A y al vector del lado derecho A T b , ya que A T A es una matriz simétrica semidefinida positiva para cualquier A . El resultado es el gradiente conjugado en las ecuaciones normales ( CGN o CGNR ).

A T Ax = A T b

Como método iterativo, no es necesario formar A T A explícitamente en memoria, sino solo realizar las multiplicaciones matriz-vector y transpuesta matriz-vector. Por lo tanto, CGNR es particularmente útil cuando A es una matriz dispersa, ya que estas operaciones suelen ser extremadamente eficientes. Sin embargo, la desventaja de formar las ecuaciones normales es que el número de condición κ( A T A ) es igual a κ 2 ( A ), por lo que la tasa de convergencia de CGNR puede ser lenta y la calidad de la solución aproximada puede ser sensible a errores de redondeo. Encontrar un buen precondicionador suele ser una parte importante del uso del método CGNR.

Se han propuesto varios algoritmos (por ejemplo, CGLS, LSQR). Se dice que el algoritmo LSQR tiene la mejor estabilidad numérica cuando A está mal condicionado, es decir, A tiene un número de condición grande .

Método del gradiente conjugado para matrices hermíticas complejas

El método del gradiente conjugado, con una modificación trivial, se puede extender para resolver, dada una matriz de valores complejos A y un vector b, el sistema de ecuaciones lineales.Aincógnita=b{\displaystyle \mathbf {A} \mathbf {x} =\mathbf {b} }para el vector de valores complejos x, donde A es una matriz hermitiana (es decir, A' = A) y definida positiva , y el símbolo ' denota la transpuesta conjugada . La modificación trivial consiste simplemente en sustituir la transpuesta real por la transpuesta conjugada en todas partes.

Ventajas y desventajas

Las ventajas y desventajas de los métodos de gradiente conjugado se resumen en las notas de clase de Nemirovsky y BenTal. [ 20 ] : Sec.7.3

Un ejemplo patológico

Este ejemplo proviene de [ 21 ] Lett(0,1){\textstyle t\in (0,1)}y definirW=[ttt1+ttt1+ttttt1+t],b=[100]{\displaystyle W={\begin{bmatrix}t&{\sqrt {t}}&&&&\\{\sqrt {t}}&1+t&{\sqrt {t}}&&&\\&{\sqrt {t}}&1+t&{\sqrt {t}}&&\\&&{\sqrt {t}}&\ddots &\ddots &\\&&&\ddots &&\\&&&&&{\sqrt {t}}\\&&&&{\sqrt {t}}&1+t\end{bmatrix}},\quad b={\begin{bmatrix}1\\0\\\vdots \\0\end{bmatrix}}}DesdeW{\displaystyle W}es invertible, existe una solución única paraWincógnita=b{\textstyle Wx=b}Resolverlo mediante descenso de gradiente conjugado nos da una convergencia bastante mala:bWincógnitak2=(1/t)k,bWincógnitanorte2=0{\displaystyle \|b-Wx_{k}\|^{2}=(1/t)^{k},\quad \|b-Wx_{n}\|^{2}=0}En otras palabras, durante el proceso de CG, el error crece exponencialmente hasta que, de repente, se vuelve cero cuando se encuentra la solución única.

Véase también

Referencias

  1. Hestenes, Magnus R. ; Stiefel, Eduard (diciembre de 1952). "Métodos de gradientes conjugados para resolver sistemas lineales" (PDF) . Journal of Research of the National Bureau of Standards . 49 (6): 409. doi : 10.6028/jres.049.044 .
  2. Straeter, TA (1971). Sobre la extensión de la clase de Davidon-Broyden de rango uno, métodos de minimización cuasi-Newton a un espacio de Hilbert de dimensión infinita con aplicaciones a problemas de control óptimo (tesis doctoral). Universidad Estatal de Carolina del Norte. hdl : 2060/19710026200 vía NASA Technical Reports Server.
  3. ^ Speiser, Ambros (2004). "Konrad Zuse und die ERMETH: Ein weltweiter Architektur-Vergleich" [ Konrad Zuse y ERMETH: una comparación mundial de arquitecturas ] . En Hellige, Hans Dieter (ed.). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive (en alemán). Berlín: Springer. pag. 185.ISBN  3-540-00217-0.
  4. 1 2 3 4 Polyak, Boris (1987). Introducción a la optimización .
  5. 1 2 3 Greenbaum, Anne (1997). Métodos iterativos para resolver sistemas lineales . doi : 10.1137/1.9781611970937 . ISBN 978-0-89871-396-1.
  6. Botev, Zdravko I.; Kroese, Dirk P.; Taimre, Thomas (2025). Ciencia de datos y aprendizaje automático: métodos matemáticos y estadísticos (2.ª ed.). Boca Raton ; Londres: CRC Press. pp. 558–559 . ISBN    978-1-032-48868-4.
  7. Paquette, Elliot; Trogdon, Thomas (marzo de 2023). "Universalidad para los algoritmos de gradiente conjugado y MINRES en matrices de covarianza de muestra" . Communications on Pure and Applied Mathematics . 76 (5): 1085– 1136. arXiv : 2007.00640 . doi : 10.1002/cpa.22081 . ISSN 0010-3640 . 
  8. Shewchuk, Jonathan R (1994). Una introducción al método del gradiente conjugado sin el dolor agonizante (PDF) .
  9. Saad, Yousef (2003). Métodos iterativos para sistemas lineales dispersos (2.ª ed.). Filadelfia, Pensilvania: Society for Industrial and Applied Mathematics. 195 págs . ISBN   978-0-89871-534-7.
  10. Holmes, M. (2023). Introducción a la computación científica y al análisis de datos, 2.ª ed . Springer. ISBN 978-3-031-22429-4.
  11. Hackbusch, W. (21 de junio de 2016). Solución iterativa de grandes sistemas de ecuaciones dispersos (2.ª ed.). Suiza: Springer. ISBN  978-3-319-28483-5OCLC 952572240 
  12. Barrett, Richard; Berry, Michael; Chan, Tony F.; Demmel, James; Donato, June; Dongarra, Jack; Eijkhout, Victor; Pozo, Roldan; Romine, Charles; van der Vorst, Henk. Plantillas para la solución de sistemas lineales: bloques de construcción para métodos iterativos (PDF) (2.ª ed.). Filadelfia, PA: SIAM. pág. 13. Consultado el 31 de marzo de 2020 .  
  13. Golub, Gene H.; Van Loan, Charles F. (2013). Computación matricial (4.ª ed.). Johns Hopkins University Press. sec. 11.5.2. ISBN  978-1-4214-0794-4.
  14. Concus, P.; Golub, GH; Meurant, G. (1985). "Preacondicionamiento por bloques para el método del gradiente conjugado" . SIAM Journal on Scientific and Statistical Computing . 6 (1): 220– 252. doi : 10.1137/0906018 .
  15. Golub, Gene H.; Ye, Qiang (1999). "Método de gradiente conjugado precondicionado inexacto con iteración interna-externa". SIAM Journal on Scientific Computing . 21 (4): 1305. CiteSeerX 10.1.1.56.1755 . doi : 10.1137/S1064827597323415 . 
  16. Notay, Yvan (2000). "Flexible Conjugate Gradients". SIAM Journal on Scientific Computing . 22 (4): 1444– 1460. CiteSeerX 10.1.1.35.7473 . doi : 10.1137/S1064827599362314 . 
  17. Bouwmeester, Henricus; Dougherty, Andrew; Knyazev, Andrew V. (2015). "Preacondicionamiento no simétrico para métodos de gradiente conjugado y descenso más pronunciado 1" . Procedia Computer Science . 51 : 276–285 . arXiv : 1212.6680 . doi : 10.1016/j.procs.2015.05.241 . S2CID 51978658 . 
  18. Knyazev, Andrew V.; Lashuk, Ilya (2008). "Métodos de descenso más pronunciado y gradiente conjugado con precondicionamiento variable". SIAM Journal on Matrix Analysis and Applications . 29 (4): 1267. arXiv : math/0605767 . doi : 10.1137/060675290 . S2CID 17614913 . 
  19. 1 2 Ross, IM , "Una teoría de control óptimo para la optimización acelerada," arXiv : 1902.09004 , 2019.
  20. Nemirovsky y Ben-Tal (2023). "Optimización III: Optimización convexa" (PDF) .
  21. Pennington, Fabian Pedregosa, Courtney Paquette, Tom Trogdon, Jeffrey. "Tutorial sobre teoría de matrices aleatorias y aprendizaje automático" . random-matrix-learning.github.io . Consultado el 5 de diciembre de 2023 .{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )

Lecturas adicionales

  • Atkinson, Kendell A. (1988). «Sección 8.9». Introducción al análisis numérico (2.ª  ed.). John Wiley and Sons. ISBN 978-0-471-50023-0.
  • Avriel, Mordecai (2003). Programación no lineal: análisis y métodos . Dover Publishing. ISBN 978-0-486-43227-4.
  • Golub, Gene H.; Van Loan, Charles F. (2013). «Capítulo 11». Cálculos matriciales (4.ª  ed.). Johns Hopkins University Press. ISBN 978-1-4214-0794-4.
  • Saad, Yousef (1 de abril de 2003). «Capítulo 6» . Métodos iterativos para sistemas lineales dispersos (2.ª  ed.). SIAM. ISBN 978-0-89871-534-7.
  • Gérard Meurant: "Detección y corrección de errores silenciosos en el algoritmo del gradiente conjugado", Numerical Algorithms, vol. 92 (2023), pp. 869-891. url= https://doi.org/10.1007/s11075-022-01380-1
  • Meurant, Gerard; Tichy, Petr (2024). Estimación de la norma del error en el algoritmo del gradiente conjugado . SIAM. ISBN 978-1-61197-785-1.