Sospecho que en general no hay mucha diferencia entre GMRES y CG para una matriz SPD.
Digamos que estamos resolviendo con A simétrica definida positiva y la suposición de partida x 0 = 0 y itera generando con CG y GMRES, los llaman x c k y x g k . Ambos métodos iterativos construirán x k desde el mismo espacio de Krylov K k = { b , A b , A 2 b , ... } . Lo harán de maneras ligeramente diferentes.UN x = bUNX0 0= 0XCkXsolkXkKk= { B , A b , A2b , ... }
CG se caracteriza por reducir al mínimo el error en la norma de la energía inducida por A , de manera que
( A e c k , e c k ) = ( A ( x - x c k ) , x - x c k ) = min y ∈ K ( A ( x - y ) , x -miCk= x - xCkUN
( A eCk, eCk) = ( A ( x - xCk) , x - xCk) = miny∈ K( A ( x - y),x−y).
GMRES minimiza en cambio el residuo , y lo hace en la norma discreta ℓ 2 , de modo que
( r k , r k ) = ( b - A x g k , b - A x g k ) = min y ∈ K ( b - A y , b - A y ) .rk= B - A xsolkℓ2
( rk, rk) = ( b - A xsolk, b - A xsolk) = miny∈ K( b - A y, b - A y) .
Ahora, utilizando la ecuación de error
podemos GMRES escribir también como minimizar
( r k , r k ) = ( A e g k , A e g k ) = ( A 2 e g k , e g k )
donde Quiero hacer hincapié en que esto sólo es válido para una matriz SPD
a . Entonces tenemos CG minimizando el error con respecto a la
UnUN ek= rk( rk, rk) = ( A esolk, A esolk) = ( A2misolk, esolk)
UNUNnorma y GMRES minimizando el error con respecto a la norma
. Si queremos que se comporten de manera muy diferente, de manera intuitiva que necesitaríamos un
Un tal que estas dos normas son muy diferentes. Pero para SPD
A, estas normas se comportarán de manera bastante similar.
UN2UNUN
Para ser aún más específico, en la primera iteración con el espacio Krylov , tanto CG como GMRES construirán una aproximación de la forma x 1 = α b . CG elegirá
α = ( b , b )K1= { b }X1= α b
y GMRES elegirá
α=(Ab,b)
α = ( b , b )( A b , b )
Si
Aes diagonal con entradas
(ε,1,1,1,...)y
b=(1,1,0,0,0,...)entonces como
ε→0el primer paso CG se convierte en doble de grande que los primeros GMRES paso. Probablemente se puede construir
unay
bα = ( A b , b )( A2b , b ).
UN( Ε , 1 , 1 , 1 , ... )b = ( 1 , 1 , 0 , 0 , 0 , ... )ϵ → 0UNsi por lo que este factor de dos diferencia continúa a través de la iteración, pero dudo de que empeore que eso.