# gmres

Solve a system of linear equations with the generalized minimum residual method.

## Syntax

x = gmres(A,b)

x = gmres(A,b,restart,rtol)

x = gmres(A,b,restart,rtol,maxit)

x = gmres(A,b,restart,rtol,maxit,M1)

x = gmres(A,b,restart,rtol,maxit,M1,M2)

x = gmres(A,b,restart,rtol,maxit,M1,M2,x0)

[x, iflag, relres, iter, resvec] = gmres(...)

## Inputs

A
The left-hand side matrix, or a function name or handle to generate A*x.
b
The right-hand side vector.
Dimension: vector
restart
The number of steps or inner iterations between restarts of the algorithm (default: size(b,1)).
Type: integer
Dimension: scalar
rtol
The relative convergerce tolerance (default: 1.0e-6).
Type: double
Dimension: scalar
maxit
The maximum number of restarts or outer iterations (default: 10). See Comments.
Type: integer
Dimension: scalar
M1
The left preconditioner matrix, or a function name or handle to generate M1\x. (default: none or [])
Dimension: matrix
M2
The right preconditioner matrix, or a function name or handle to generate M2\x. (default: none or [])
x0
The initial estimate of the solution (default: zeroes(length(b),1)).
Dimension: vector

## Outputs

x
The solution vector.
iflag
The termination status.
iflag = 0:
The algorithm converged within the allowed tolerance and number of iterations.
iflag = 1:
The algorithm completed the allowed iterations without converging.
iflag = 2:
A preconditioner matrix was singular.
iflag = 3:
The algorithm converged, but not at a solution due to stagnation.
relres
The magnitude of the residual relative to norm(b).
iter
The outer and inner iteration numbers at which the solution was found.
resvec
The residual vector.

## Example

Case using a function handle for A and a left preconditioner.

A = [3, 1, 0; 0, 5, 6; -2, 0, 4];
b = [13; 14; -10];
tol = 0.0001;
max_it = 5;
M1 = diag(diag(A));
M2 = [];
x0 = [];
Ahandle = @(x) A * x;
[x, iflag, relres, iter, resvec] = gmres(Ahandle, b, [], tol, max_it, M1, M2, x0)
x = [Matrix] 3 x 1
3.00000
4.00000
-1.00000
iflag = 0
relres = 3.85757e-16
iter = [Matrix] 1 x 2
1  3
resvec = [Matrix] 4 x 1
5.73304e+00
3.10450e+00
6.03540e-02
2.21156e-15