gmres(A, b, x0=None, tol=1e-05, restart=None, maxiter=None, M=None, callback=None, restrt=None, atol=None, callback_type=None)
A preconditioner, P, is chosen such that P is close to A but easy to solve for. The preconditioner parameter required by this routine is M = P^-1
. The inverse should preferably not be calculated explicitly. Rather, use the following template to produce M:
# Construct a linear operator that computes P^-1 @ x. import scipy.sparse.linalg as spla M_x = lambda x: spla.spsolve(P, x) M = spla.LinearOperator((n, n), M_x)
Starting guess for the solution (a vector of zeros by default).
Tolerances for convergence, norm(residual) <= max(tol*norm(b), atol)
. The default for atol
is 'legacy'
, which emulates a different legacy behavior.
The default value for :None:None:`atol`
will be changed in a future release. For future compatibility, specify :None:None:`atol`
explicitly.
Number of iterations between restarts. Larger values increase iteration cost, but may be necessary for convergence. Default is 20.
Maximum number of iterations (restart cycles). Iteration will stop after maxiter steps even if the specified tolerance has not been achieved.
Inverse of the preconditioner of A. M should approximate the inverse of A and be easy to solve for (see Notes). Effective preconditioning dramatically improves the rate of convergence, which implies that fewer iterations are needed to reach a given error tolerance. By default, no preconditioner is used.
User-supplied function to call after each iteration. It is called as :None:None:`callback(args)`
, where :None:None:`args`
are selected by :None:None:`callback_type`
.
Callback function argument requested:
x
: current iterate (ndarray), called on every restart
pr_norm
: relative (preconditioned) residual norm (float), called on every inner iteration
legacy
(default): same as pr_norm
, but also changes the meaning of 'maxiter' to count inner iterations instead of restart cycles.
DEPRECATED - use restart
instead.
The real or complex N-by-N matrix of the linear system. Alternatively, A
can be a linear operator which can produce Ax
using, e.g., scipy.sparse.linalg.LinearOperator
.
Right hand side of the linear system. Has shape (N,) or (N,1).
Use Generalized Minimal RESidual iteration to solve Ax = b
.
>>> from scipy.sparse import csc_matrix
... from scipy.sparse.linalg import gmres
... A = csc_matrix([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float)
... b = np.array([2, 4, -1], dtype=float)
... x, exitCode = gmres(A, b)
... print(exitCode) # 0 indicates successful convergence 0
>>> np.allclose(A.dot(x), b) TrueSee :
The following pages refer to to this document either explicitly or contain code examples using this.
scipy.optimize._nonlin.newton_krylov
scipy.optimize._root._root_krylov_doc
scipy.optimize._nonlin.KrylovJacobian
Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.
Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)
SVG is more flexible but power hungry; and does not scale well to 50 + nodes.
All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them