In mathematics, the conjugate gradient method is an algorithm for the numerical solution of particular systems of linear equations, namely those whose matrix is symmetric and positive definite. The conjugate gradient method is an iterative method, so it can be applied to sparse systems which are too large to be handled by direct methods such as the Cholesky decomposition. Such systems arise regularly when numerically solving partial differential equations.
The conjugate gradient method can also be used to solve unconstrained optimization problems.
The biconjugate gradient method provides a generalization to non-symmetric matrices.
Description of the method
Suppose we want to solve the following system of linear equations
-
where the
n-by-
n matrix
A is symmetric (i.e.,
AT =
A), positive definite (i.e.,
xTAx > 0 for all non-zero vectors
x in
Rn), and real.
We denote the unique solution of this system by x*.
The conjugate gradient method as a direct method
We say that two non-zero vectors u and v are conjugate (with respect to A) if
-
Since
A is symmetric and positive definite, the left-hand side defines an
inner product
-
So, two vectors are conjugate if they are orthogonal with respect to this inner product.
Being conjugate is a symmetric relation: if
u is conjugate to
v, then
v is conjugate to
u.
(Note. This notion of
conjugate is not related to the notion of
complex conjugate.)
Suppose that {pk} is a sequence of n mutually conjugate directions. Then the pk form a basis of Rn, so we can expand the solution x* of Ax = b in this basis:
-
The coefficients are given by
-
This result is perhaps most transparent by considering the inner product defined above.
This gives the following method for solving the equation Ax = b. We first find a sequence of n conjugate directions and then we compute the coefficients αk.
The conjugate gradient method as an iterative method
If we choose the conjugate vectors pk carefully, then we may not need all of them to obtain a good approximation to the solution x*. So, we want to regard the conjugate gradient method as an iterative method. This also allows us to solve systems where n is so large that the direct method would take too much time.
We denote the initial guess for x* by x0. We can assume without loss of generality that x0 = 0 (otherwise, consider the system Az = b − Ax0 instead). Note that the solution x* is also the unique minimizer of
-
This suggests taking the first basis vector
p1 to be the gradient of
f at
x =
x0, which equals
b. The other vectors in the basis will be conjugate to the gradient, hence the name
conjugate gradient method.
Let rk be the residual at the kth step:
-
Note that
rk is the gradient of
f at
x =
xk, so the
gradient descent method would be to move in the direction
rk. Here, we insist that the directions
pk are conjugate to each other, so we take the direction closest to the gradient
rk under the conjugacy constraint. This gives the following expression:
-
The resulting algorithm
After some simplifications, this results in the following algorithm for solving
where
is a real, symmetric, positive-definite matrix. The input vector
can be an approximate initial solution or 0.
-
-
- repeat until is "sufficiently small":
-
- if
-
- else
-
- end if
-
-
-
- end repeat
- The result is
External links
References
The conjugate gradient method was originally proposed in
- Magnus R. Hestenes and Eduard Stiefel (1952), Methods of conjugate gradients for solving linear systems, J. Research Nat. Bur. Standards 49, 409–436.
A description of method can be found in the following text books:
- Kendell A. Atkinson (1988), An introduction to numerical analysis (2nd ed.), Section 8.9, John Wiley and Sons. ISBN 0-471-50023-2.
- Gene H. Golub and Charles F. Van Loan, Matrix computations (3rd ed.), Chapter 10, Johns Hopkins University Press. ISBN 0-8018-5414-8.
Numerical linear algebra | Optimization algorithms
CG-Verfahren | Méthode du gradient conjugué | 共役勾配法 | 共轭梯度法