Conjugate gradient squared method

{{Short description|Algorithm for solving matrix-vector equations}}

In numerical linear algebra, the conjugate gradient squared method (CGS) is an iterative algorithm for solving systems of linear equations of the form A{\bold x} = {\bold b}, particularly in cases where computing the transpose A^T is impractical.{{cite web|title=Conjugate Gradient Squared Method|author1=Noel Black|author2=Shirley Moore|publisher=Wolfram Mathworld|url=https://mathworld.wolfram.com/ConjugateGradientSquaredMethod.html}} The CGS method was developed as an improvement to the biconjugate gradient method.{{cite web|title=cgs|author=Mathworks|website=Matlab documentation|url=https://au.mathworks.com/help/matlab/ref/cgs.html}}{{cite book|author=Henk van der Vorst|title=Iterative Krylov Methods for Large Linear Systems|chapter=Bi-Conjugate Gradients|year=2003|publisher=Cambridge University Press |isbn=0-521-81828-1}}{{cite journal|title=CGS, A Fast Lanczos-Type Solver for Nonsymmetric Linear systems|author=Peter Sonneveld|journal=SIAM Journal on Scientific and Statistical Computing|volume=10|issue=1|pages=36–52|date=1989|url=https://www.proquest.com/docview/921988114|url-access=limited|doi=10.1137/0910004|id={{ProQuest|921988114}} }}

Background

A system of linear equations A{\bold x} = {\bold b} consists of a known matrix A and a known vector {\bold b}. To solve the system is to find the value of the unknown vector {\bold x}.{{Citation |title=Matrix Analysis and Applied Linear Algebra |pages=1–40 |access-date=2023-12-18 |archive-url=https://web.archive.org/web/20040610221137/http://www.matrixanalysis.com/Chapter1.pdf |chapter=Linear equations |date=2000 |chapter-url=http://www.matrixanalysis.com/Chapter1.pdf |place= Philadelphia, PA |publisher=SIAM |doi=10.1137/1.9780898719512.ch1 |doi-broken-date=1 November 2024|isbn=978-0-89871-454-8 |archive-date=2004-06-10 }} A direct method for solving a system of linear equations is to take the inverse of the matrix A, then calculate \bold x = A^{-1}\bold b. However, computing the inverse is computationally expensive. Hence, iterative methods are commonly used. Iterative methods begin with a guess \bold x^{(0)}, and on each iteration the guess is improved. Once the difference between successive guesses is sufficiently small, the method has converged to a solution.{{cite web|title=Iterative Methods for Linear Systems|publisher=Mathworks|url=https://au.mathworks.com/help/matlab/math/iterative-methods-for-linear-systems.html}}{{cite web|title=Iterative Methods for Solving Linear Systems|author=Jean Gallier|publisher=UPenn|url=https://www.cis.upenn.edu/~cis5150/cis515-12-sl5.pdf}}

As with the conjugate gradient method, biconjugate gradient method, and similar iterative methods for solving systems of linear equations, the CGS method can be used to find solutions to multi-variable optimisation problems, such as power-flow analysis, hyperparameter optimisation, and facial recognition.{{cite web|title=Conjugate gradient methods|author1=Alexandra Roberts|author2=Anye Shi|author3=Yue Sun|access-date=2023-12-26|publisher=Cornell University|url=https://optimization.cbe.cornell.edu/index.php?title=Conjugate_gradient_methods}}

Algorithm

The algorithm is as follows:{{cite book|author1=R. Barrett|author2=M. Berry|author3=T. F. Chan|author4=J. Demmel|author5=J. Donato|author6=J. Dongarra|author7=V. Eijkhout|author8=R. Pozo|author9=C. Romine|author10=H. Van der Vorst|title=Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, 2nd Edition|publisher=SIAM|year=1994|url=https://netlib.org/linalg/html_templates/Templates.html}}

  1. Choose an initial guess {\bold x}^{(0)}
  2. Compute the residual {\bold r}^{(0)} = {\bold b} - A{\bold x}^{(0)}
  3. Choose \tilde {\bold r}^{(0)} = {\bold r}^{(0)}
  4. For i = 1, 2, 3, \dots do:
  5. \rho^{(i-1)} = \tilde {\bold r}^{T(i-1)}{\bold r}^{(i-1)}
  6. If \rho^{(i-1)} = 0, the method fails.
  7. If i=1:
  8. {\bold p}^{(1)} = {\bold u}^{(1)} = {\bold r}^{(0)}
  9. Else:
  10. \beta^{(i-1)} = \rho^{(i-1)}/\rho^{(i-2)}
  11. {\bold u}^{(i)} = {\bold r}^{(i-1)} + \beta_{i-1}{\bold q}^{(i-1)}
  12. {\bold p}^{(i)} = {\bold u}^{(i)} + \beta^{(i-1)}({\bold q}^{(i-1)} + \beta^{(i-1)}{\bold p}^{(i-1)})
  13. Solve M\hat {\bold p}={\bold p}^{(i)}, where M is a pre-conditioner.
  14. \hat {\bold v} = A\hat {\bold p}
  15. \alpha^{(i)} = \rho^{(i-1)} / \tilde {\bold r}^T \hat {\bold v}
  16. {\bold q}^{(i)} = {\bold u}^{(i)} - \alpha^{(i)}\hat {\bold v}
  17. Solve M\hat {\bold u} = {\bold u}^{(i)} + {\bold q}^{(i)}
  18. {\bold x}^{(i)} = {\bold x}^{(i-1)} + \alpha^{(i)} \hat {\bold u}
  19. \hat {\bold q} = A\hat {\bold u}
  20. {\bold r}^{(i)} = {\bold r}^{(i-1)} - \alpha^{(i)}\hat {\bold q}
  21. Check for convergence: if there is convergence, end the loop and return the result

See also

References