Skip to main content
`Ctrl`+`K`

# scipy.sparse.linalg.qmr

scipy.sparse.linalg.qmr(A, b, x0=None, *, tol=<object object>, maxiter=None, M1=None, M2=None, callback=None, atol=0.0, rtol=1e-05)

  Use Quasi-Minimal Residual iteration to solve `Ax = b`.

  Parameters:
    A{sparse matrix, ndarray, LinearOperator}

      The real-valued N-by-N matrix of the linear system. Alternatively, `A` can be a linear operator which can produce `Ax` and `A^T x` using, e.g., `scipy.sparse.linalg.LinearOperator`.

    b ndarray

      Right hand side of the linear system. Has shape (N,) or (N,1).

    x0 ndarray

      Starting guess for the solution.

    atol, rtol float, optional

      Parameters for the convergence test. For convergence, `norm(b - A @ x) <= max(rtol*norm(b), atol)` should be satisfied. The default is `atol=0.` and `rtol=1e-5`.

    maxiter integer

      Maximum number of iterations. Iteration will stop after maxiter steps even if the specified tolerance has not been achieved.

    M1{sparse matrix, ndarray, LinearOperator}

      Left preconditioner for A.

    M2{sparse matrix, ndarray, LinearOperator}

      Right preconditioner for A. Used together with the left preconditioner M1. The matrix M1@A@M2 should have better conditioned than A alone.

    callback function

      User-supplied function to call after each iteration. It is called as callback(xk), where xk is the current solution vector.

    tol float, optional, deprecated

      Deprecated since version 1.12.0: `qmr` keyword argument `tol` is deprecated in favor of `rtol` and will be removed in SciPy 1.14.0.

  Returns:
    x ndarray

      The converged solution.

    info integer
      Provides convergence information:

        0 : successful exit >0 : convergence to tolerance not achieved, number of iterations <0 : parameter breakdown

  See also

  `LinearOperator`

  Examples

      >>> import numpy as np
      >>> from scipy.sparse import csc_matrix
      >>> from scipy.sparse.linalg import qmr
      >>> A = csc_matrix([[3., 2., 0.], [1., -1., 0.], [0., 5., 1.]])
      >>> b = np.array([2., 4., -1.])
      >>> x, exitCode = qmr(A, b, atol=1e-5)
      >>> print(exitCode)            # 0 indicates successful convergence
      0
      >>> np.allclose(A.dot(x), b)
      True