mindspore.scipy.sparse.linalg.cg
- mindspore.scipy.sparse.linalg.cg(A, b, x0=None, *, tol=1e-05, atol=0.0, maxiter=None, M=None)[source]
- Use Conjugate Gradient iteration to solve \(Ax = b\). - The numerics of MindSpore’s cg should exact match SciPy’s cg (up to numerical precision). - Derivatives of cg are implemented via implicit differentiation with another cg solve, rather than by differentiating through the solver. They will be accurate only if both solves converge. - Note - In the future, MindSpore will report the number of iterations when convergence is not achieved, like SciPy. Currently it is None, as a Placeholder. Input A must represent a hermitian, positive definite matrix. If not, the output is wrong and inconsistent with scipy. - Parameters
- A (Union[Tensor, function]) – 2D Tensor or function that calculates the linear map (matrix-vector product) \(Ax\) when called like \(A(x)\). As function, A must return Tensor with the same structure and shape as its input matrix. 
- b (Tensor) – Right hand side of the linear system representing a single vector. Can be stored as a Tensor. 
- x0 (Tensor) – Starting guess for the solution. Must have the same structure as b. Default: None. 
- tol (float, optional) – Tolerances for convergence, \(norm(residual) <= max(tol*norm(b), atol)\). We do not implement SciPy’s “legacy” behavior, so MindSpore’s tolerance will differ from SciPy unless you explicitly pass atol to SciPy’s cg. Default: 1e-5. 
- atol (float, optional) – The same as tol. Default: 0.0. 
- maxiter (int) – Maximum number of iterations. Iteration will stop after maxiter steps even if the specified tolerance has not been achieved. Default: None. 
- M (Union[Tensor, function]) – Preconditioner for A. The preconditioner should approximate the inverse of A. Effective preconditioning dramatically improves the rate of convergence, which implies that fewer iterations are needed to reach a given error tolerance. Default: None. 
 
- Returns
- Tensor, the converged solution. Has the same structure as b. 
- None, placeholder for convergence information. 
 
- Raises
- ValueError – If x0 and b don’t have the same structure. 
- TypeError – If A, x0 and b don’t have the same float types(mstype.float32 or mstype.float64). 
 
 - Supported Platforms:
- CPU- GPU
 - Examples - >>> import numpy as onp >>> from mindspore.common import Tensor >>> from mindspore.scipy.sparse.linalg import cg >>> A = Tensor(onp.array([[1, 2], [2, 1]], dtype='float32')) >>> b = Tensor(onp.array([1, -1], dtype='float32')) >>> result, _ = cg(A, b) >>> result Tensor(shape=[2], dtype=Float32, value= [-1.00000000e+00, 1.00000000e+00])