improves the rate of convergence, which implies that fewer iterations are needed to reach a given error tolerance. callback : function User-supplied function to call after each iteration. It is called as ``callback(xk)``, where ``xk`` is the current solution vector. 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 Notes ----- The preconditioner `M` should be a matrix such that ``M @ A`` has a smaller condition number than `A`, see [1]_ . References ---------- .. [1] "Preconditioner", Wikipedia, https://en.wikipedia.org/wiki/Preconditioner .. [2] "Biconjugate gradient stabilized method", Wikipedia, https://en.wikipedia.org/wiki/Biconjugate_gradient_stabilized_method Examples -------- >>> import numpy as np >>> from scipy.sparse import csc_array >>> from scipy.sparse.linalg import bicgstab >>> R = np.array([[4, 2, 0, 1], ... [3, 0, 0, 2], ... [0, 1, 1, 1], ... [0, 2, 1, 0]]) >>> A = csc_array(R) >>> b = np.array([-1, -0.5, -1, 2]) >>> x, exit_code = bicgstab(A, b, atol=1e-5) >>> print(exit_code) # 0 indicates successful convergence 0 >>> np.allclose(A.dot(x), b) True r