Método del gradiente biconjugado estabilizado

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

En álgebra lineal numérica, el método del gradiente biconjugado estabilizado, generalmente abreviado como BiCGSTAB (del inglés «biconjugate gradient stabilized method»), es un método iterativo propuesto por H. A. van der Vorst para la resolución numérica de los sistemas de ecuaciones lineales no simétricos. Es una variante del método del gradiente biconjugado (BiCG) y ofrece convergencia más rápida y suave que el original BiCG así como otras variantes como el método del gradiente conjugado cuadrado (CGS). Es un método del subespacio de Krylov.

Pasos algorítmicos[editar]

BiCGSTAB sin precondicionamiento[editar]

Para resolver el sistema \boldsymbol{Ax}=\boldsymbol{b}, el BiCGSTAB comienza con una aproximación inicial \boldsymbol{x}_0 y procede como sigue:

  1. \boldsymbol{r}_0=\boldsymbol{b}-\boldsymbol{Ax_0}
  2. Elige un vector arbitrario \boldsymbol{\hat{r}}_0 tal que (\boldsymbol{\hat{r}}_0,\boldsymbol{r}_0) \neq0, por ejemplo, \boldsymbol{\hat{r}}_0=\boldsymbol{r}_0
  3. \boldsymbol{p}_0=\boldsymbol{r}_0
  4. Para i=0,1,2,\ldots\;
    1. \alpha_i=(\boldsymbol{r}_i,\boldsymbol{\hat{r}}_0)/(\boldsymbol{Ap}_i,\boldsymbol{\hat{r}}_0)
    2. \boldsymbol{s}_i=\boldsymbol{r}_i-\alpha_i\boldsymbol{Ap_i}
    3. \omega_i=(\boldsymbol{As}_i,\boldsymbol{s}_i)/(\boldsymbol{As}_i,\boldsymbol{As}_i)
    4. \boldsymbol{x}_{i+1}=\boldsymbol{x}_i+\alpha_i\boldsymbol{p}_i+\omega_i\boldsymbol{s}_i
    5. Termina si \boldsymbol{x}_{i+1} cumple el criterio de convergencia
    6. \boldsymbol{r}_{i+1}=\boldsymbol{s}_i-\omega_i\boldsymbol{As}_i
    7. \beta_i=(\alpha_i/\omega_i)(\boldsymbol{r}_{i+1},\boldsymbol{\hat{r}}_0)/(\boldsymbol{r}_i,\boldsymbol{\hat{r}}_0)\;
    8. \boldsymbol{p}_{i+1}=\boldsymbol{r}_{i+1}+\beta_i(\boldsymbol{p}_i-\omega_i\boldsymbol{Ap}_i)

BiCGSTAB precondicionado[editar]

Generalmente se utiliza los precondicionadores para acelerar la convergencia de los métodos iterativos. Para resolver el sistema \boldsymbol{Ax}=\boldsymbol{b} con un precondicionador \boldsymbol{K}=\boldsymbol{K}_1\boldsymbol{K}_2\approx\boldsymbol{A}, el BiCGSTAB precondicionado comienza con una aproximación inicial \boldsymbol{x}_0 y procede como sigue:

  1. \boldsymbol{r}_0=\boldsymbol{b}-\boldsymbol{Ax_0}
  2. Elige un vector arbitrario \boldsymbol{\hat{r}}_0 tal que (\boldsymbol{\hat{r}}_0,\boldsymbol{r}_0) \neq0, por ejemplo, \boldsymbol{\hat{r}}_0=\boldsymbol{r}_0
  3. \rho_0=\alpha=\omega_0=1\;
  4. \boldsymbol{v}_0=\boldsymbol{p}_0=\boldsymbol{0}
  5. Para i=1,2,3,\ldots\;
    1. \rho_i=(\boldsymbol{\hat{r}}_0,\boldsymbol{r}_{i-1})
    2. \beta=(\rho_i/\rho_{i-1})(\alpha/\omega_{i-1})\;
    3. \boldsymbol{p}_i=\boldsymbol{r}_{i-1}+\beta(\boldsymbol{p}_{i-1}-\omega_{i-1}\boldsymbol{v}_{i-1})
    4. \boldsymbol{y}=\boldsymbol{K}^{-1}\boldsymbol{p}_i
    5. \boldsymbol{v}_i=\boldsymbol{Ay}
    6. \alpha=\rho_i/(\boldsymbol{\hat{r}}_0,\boldsymbol{v}_i)
    7. \boldsymbol{s}=\boldsymbol{r}_i-\alpha\boldsymbol{v}_i
    8. \boldsymbol{z}=\boldsymbol{As}
    9. \boldsymbol{t}=\boldsymbol{K}^{-1}\boldsymbol{z}
    10. \omega_i=(\boldsymbol{K}_1^{-1}\boldsymbol{t},\boldsymbol{K}_1^{-1}\boldsymbol{s})/(\boldsymbol{K}_1^{-1}\boldsymbol{s},\boldsymbol{K}_1^{-1}\boldsymbol{s})
    11. \boldsymbol{x}_i=\boldsymbol{x}_{i-1}+\alpha\boldsymbol{y}+\omega_i\boldsymbol{z}
    12. Termina si \boldsymbol{x}_i es lo suficientemente preciso
    13. \boldsymbol{r}_i=\boldsymbol{s}-\omega_i\boldsymbol{t}

Esta formulación es equivalente a aplicar el BiCGSTAB sin precondicionamiento al sistema explícitamente precondicionado

\boldsymbol{\tilde{A}\tilde{x}}=\boldsymbol{\tilde{b}}

con \boldsymbol{\tilde{A}}=\boldsymbol{K}_1^{-1}\boldsymbol{AK}_2^{-1}, \boldsymbol{\tilde{x}}=\boldsymbol{K}_2\boldsymbol{x}, \boldsymbol{\tilde{b}}=\boldsymbol{K}_1^{-1}\boldsymbol{b}. En otras palabras, precondicionamiento a ambas la izquierda y la derecha es posible en esta formulación.

Generalización[editar]

BiCGSTAB puede ser visto como una combinación de BiCG y GMRES en que cada paso de BiCG se sigue por un paso de GMRES(1) (GMRES reiniciado en cada paso) para reparar el comportamiento irregular de convergencia de CGS, de lo cual BiCGSTAB fue desarrollado como una mejora. No obstante, debido al uso de los polinomios del residuo mínimo de grado uno, la dicha reparación puede no ser eficaz si la matriz \boldsymbol{A} tiene pares propios complejos grandes. En tales casos, es probable que BiCGSTAB se estanca como lo confirman los experimentos numéricos.

Se puede esparar que los polinomios del residuo mínimo de grado más alto pueda mejor manejar esta situación. Esto da lugar a los métodos que incluyen BiCGSTAB2[1] y el más general BiCGSTAB(l).[2] En BiCGSTAB(l), un paso de GMRES(l) sigue cada l pasos de BiCG. BiCGSTAB2 es equivalente a BiCGSTAB(l) con l=2.

Véase también[editar]

Referencias[editar]

  1. Gutknecht, M. H. (1993). «Variants of BICGSTAB for Matrices with Complex Spectrum» (en inglés). SIAM Journal on Scientific Computing 14 (5):  pp. 1020–1033. doi:10.1137/0914062. 
  2. Sleijpen, G. L. G.; Fokkema, D. R. (1993). «BiCGstab(l) for linear equations involving unsymmetric matrices with complex spectrum» (en inglés, PDF). Electronic Transactions on Numerical Analysis (Kent, OH, EEUU: Kent State University) 1:  pp. 11–32. ISSN 1068-9613. http://www.emis.ams.org/journals/ETNA/vol.1.1993/pp11-32.dir/pp11-32.pdf. 

Bibliografía[editar]

  • Van der Vorst, H. A. (1992). «Bi-CGSTAB: A Fast and Smoothly Converging Variant of Bi-CG for the Solution of Nonsymmetric Linear Systems» (en inglés). SIAM Journal on Scientific and Statistical Computing 13:  pp. 631–644. doi:10.1137/0913035.