### 18.5 Specialized Solvers

Function File: x = bicg (A, b, rtol, maxit, M1, M2, x0)
Function File: x = bicg (A, b, rtol, maxit, P)
Function File: [x, flag, relres, iter, resvec] = bicg (A, b, …)

  Solve `A x = b` using the Bi-conjugate gradient iterative method.

  - - rtol is the relative tolerance, if not given or set to [] the default value 1e-6 is used.
  - - maxit the maximum number of outer iterations, if not given or set to [] the default value `min (20, numel (b))` is used.
  - - x0 the initial guess, if not given or set to [] the default value `zeros (size (b))` is used.

  A can be passed as a matrix or as a function handle or inline function `f` such that `f(x, "notransp") = A*x` and `f(x, "transp") = A'*x`.

  The preconditioner P is given as `P = M1 * M2`. Both M1 and M2 can be passed as a matrix or as a function handle or inline function `g` such that `g(x, "notransp") = M1 \ x` or `g(x, "notransp") = M2 \ x` and `g(x, "transp") = M1' \ x` or `g(x, "transp") = M2' \ x`.

  If called with more than one output parameter

  - - flag indicates the exit status:
    - - 0: iteration converged to the within the chosen tolerance
    - - 1: the maximum number of iterations was reached before convergence
    - - 3: the algorithm reached stagnation

    (the value 2 is unused but skipped for compatibility).

  - - relres is the final value of the relative residual.
  - - iter is the number of iterations performed.
  - - resvec is a vector containing the relative residual at each iteration.

  See also: bicgstab, cgs, gmres, pcg, qmr.

Function File: x = bicgstab (A, b, rtol, maxit, M1, M2, x0)
Function File: x = bicgstab (A, b, rtol, maxit, P)
Function File: [x, flag, relres, iter, resvec] = bicgstab (A, b, …)

  Solve `A x = b` using the stabilizied Bi-conjugate gradient iterative method.

  - - rtol is the relative tolerance, if not given or set to [] the default value 1e-6 is used.
  - - maxit the maximum number of outer iterations, if not given or set to [] the default value `min (20, numel (b))` is used.
  - - x0 the initial guess, if not given or set to [] the default value `zeros (size (b))` is used.

  A can be passed as a matrix or as a function handle or inline function `f` such that `f(x) = A*x`.

  The preconditioner P is given as `P = M1 * M2`. Both M1 and M2 can be passed as a matrix or as a function handle or inline function `g` such that `g(x) = M1 \ x` or `g(x) = M2 \ x`.

  If called with more than one output parameter

  - - flag indicates the exit status:
    - - 0: iteration converged to the within the chosen tolerance
    - - 1: the maximum number of iterations was reached before convergence
    - - 3: the algorithm reached stagnation

    (the value 2 is unused but skipped for compatibility).

  - - relres is the final value of the relative residual.
  - - iter is the number of iterations performed.
  - - resvec is a vector containing the relative residual at each iteration.

  See also: bicg, cgs, gmres, pcg, qmr.

Function File: x = cgs (A, b, rtol, maxit, M1, M2, x0)
Function File: x = cgs (A, b, rtol, maxit, P)
Function File: [x, flag, relres, iter, resvec] = cgs (A, b, …)

  Solve `A x = b`, where A is a square matrix, using the Conjugate Gradients Squared method.

  - - rtol is the relative tolerance, if not given or set to [] the default value 1e-6 is used.
  - - maxit the maximum number of outer iterations, if not given or set to [] the default value `min (20, numel (b))` is used.
  - - x0 the initial guess, if not given or set to [] the default value `zeros (size (b))` is used.

  A can be passed as a matrix or as a function handle or inline function `f` such that `f(x) = A*x`.

  The preconditioner P is given as `P = M1 * M2`. Both M1 and M2 can be passed as a matrix or as a function handle or inline function `g` such that `g(x) = M1 \ x` or `g(x) = M2 \ x`.

  If called with more than one output parameter

  - - flag indicates the exit status:
    - - 0: iteration converged to the within the chosen tolerance
    - - 1: the maximum number of iterations was reached before convergence
    - - 3: the algorithm reached stagnation

    (the value 2 is unused but skipped for compatibility).

  - - relres is the final value of the relative residual.
  - - iter is the number of iterations performed.
  - - resvec is a vector containing the relative residual at each iteration.

  See also: pcg, bicgstab, bicg, gmres, qmr.

Function File: x = gmres (A, b, m, rtol, maxit, M1, M2, x0)
Function File: x = gmres (A, b, m, rtol, maxit, P)
Function File: [x, flag, relres, iter, resvec] = gmres (…)

  Solve `A x = b` using the Preconditioned GMRES iterative method with restart, a.k.a. PGMRES(m).

  - - rtol is the relative tolerance, if not given or set to [] the default value 1e-6 is used.
  - - maxit is the maximum number of outer iterations, if not given or set to [] the default value `min (10, numel (b) / restart)` is used.
  - - x0 is the initial guess, if not given or set to [] the default value `zeros (size (b))` is used.
  - - m is the restart parameter, if not given or set to [] the default value `numel (b)` is used.

  Argument A can be passed as a matrix, function handle, or inline function `f` such that `f(x) = A*x`.

  The preconditioner P is given as `P = M1 * M2`. Both M1 and M2 can be passed as a matrix, function handle, or inline function `g` such that `g(x) = M1\x` or `g(x) = M2\x`.

  Besides the vector x, additional outputs are:

  - - flag indicates the exit status:
    0 : iteration converged to within the specified tolerance
    1 : maximum number of iterations exceeded
    2 : unused, but skipped for compatibility
    3 : algorithm reached stagnation (no change between iterations)
  - - relres is the final value of the relative residual.
  - - iter is a vector containing the number of outer iterations and total iterations performed.
  - - resvec is a vector containing the relative residual at each iteration.

  See also: bicg, bicgstab, cgs, pcg, pcr, qmr.

Function File: x = qmr (A, b, rtol, maxit, M1, M2, x0)
Function File: x = qmr (A, b, rtol, maxit, P)
Function File: [x, flag, relres, iter, resvec] = qmr (A, b, …)

  Solve `A x = b` using the Quasi-Minimal Residual iterative method (without look-ahead).

  - - rtol is the relative tolerance, if not given or set to [] the default value 1e-6 is used.
  - - maxit the maximum number of outer iterations, if not given or set to [] the default value `min (20, numel (b))` is used.
  - - x0 the initial guess, if not given or set to [] the default value `zeros (size (b))` is used.

  A can be passed as a matrix or as a function handle or inline function `f` such that `f(x, "notransp") = A*x` and `f(x, "transp") = A'*x`.

  The preconditioner P is given as `P = M1 * M2`. Both M1 and M2 can be passed as a matrix or as a function handle or inline function `g` such that `g(x, "notransp") = M1 \ x` or `g(x, "notransp") = M2 \ x` and `g(x, "transp") = M1' \ x` or `g(x, "transp") = M2' \ x`.

  If called with more than one output parameter

  - - flag indicates the exit status:
    - - 0: iteration converged to the within the chosen tolerance
    - - 1: the maximum number of iterations was reached before convergence
    - - 3: the algorithm reached stagnation

    (the value 2 is unused but skipped for compatibility).

  - - relres is the final value of the relative residual.
  - - iter is the number of iterations performed.
  - - resvec is a vector containing the residual norms at each iteration.

  References:

  1. R. Freund and N. Nachtigal, QMR: a quasi-minimal residual method for non-Hermitian linear systems, Numerische Mathematik, 1991, 60, pp. 315-339.
  2. R. Barrett, M. Berry, T. Chan, J. Demmel, J. Donato, J. Dongarra, V. Eijkhour, R. Pozo, C. Romine, and H. van der Vorst, Templates for the solution of linear systems: Building blocks for iterative methods, SIAM, 2nd ed., 1994.

  See also: bicg, bicgstab, cgs, gmres, pcg.