# tf.linalg.experimental.conjugate_gradient

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/ops/linalg/sparse/conjugate_gradient.py#L30-L138) |

Conjugate gradient solver.

#### View aliases


**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.linalg.experimental.conjugate_gradient`](https://www.tensorflow.org/api_docs/python/tf/linalg/experimental/conjugate_gradient)

<br />

    tf.linalg.experimental.conjugate_gradient(
        operator,
        rhs,
        preconditioner=None,
        x=None,
        tol=1e-05,
        max_iter=20,
        name='conjugate_gradient'
    )

Solves a linear system of equations `A*x = rhs` for self-adjoint, positive
definite matrix `A` and right-hand side vector `rhs`, using an iterative,
matrix-free algorithm where the action of the matrix A is represented by
`operator`. The iteration terminates when either the number of iterations
exceeds `max_iter` or when the residual norm has been reduced to `tol`
times its initial value, i.e. \\(\|\|rhs - A x_k\|\| \<= tol \|\|rhs\|\|\\).

<br />

<br />

<br />

| ## Args ||
|---|---|
| `operator` | A `LinearOperator` that is self-adjoint and positive definite. |
| `rhs` | A possibly batched vector of shape `[..., N]` containing the right-hand size vector. |
| `preconditioner` | A `LinearOperator` that approximates the inverse of `A`. An efficient preconditioner could dramatically improve the rate of convergence. If `preconditioner` represents matrix `M`(`M` approximates `A^{-1}`), the algorithm uses `preconditioner.apply(x)` to estimate `A^{-1}x`. For this to be useful, the cost of applying `M` should be much lower than computing `A^{-1}` directly. |
| `x` | A possibly batched vector of shape `[..., N]` containing the initial guess for the solution. |
| `tol` | A float scalar convergence tolerance. |
| `max_iter` | An integer giving the maximum number of iterations. |
| `name` | A name scope for the operation. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| `output` | A namedtuple representing the final state with fields: <br /> - i: A scalar `int32` `Tensor`. Number of iterations executed. - x: A rank-1 `Tensor` of shape `[..., N]` containing the computed solution. - r: A rank-1 `Tensor` of shape `[.., M]` containing the residual vector. - p: A rank-1 `Tensor` of shape `[..., N]`. `A`-conjugate basis vector. - gamma: \\(r \\dot M \\dot r\\), equivalent to \\(\|\|r\|\|_2\^2\\) when `preconditioner=None`. |