# scipy.linalg.solve_toeplitz#

scipy.linalg.solve_toeplitz(c_or_cr, b, check_finite=True)[source]#

Solve a Toeplitz system using Levinson Recursion

The Toeplitz matrix has constant diagonals, with c as its first column and r as its first row. If r is not given, `r == conjugate(c)` is assumed.

Parameters:
c_or_crarray_like or tuple of (array_like, array_like)

The vector `c`, or a tuple of arrays (`c`, `r`). Whatever the actual shape of `c`, it will be converted to a 1-D array. If not supplied, `r = conjugate(c)` is assumed; in this case, if c[0] is real, the Toeplitz matrix is Hermitian. r[0] is ignored; the first row of the Toeplitz matrix is `[c[0], r[1:]]`. Whatever the actual shape of `r`, it will be converted to a 1-D array.

b(M,) or (M, K) array_like

Right-hand side in `T x = b`.

check_finitebool, optional

Whether to check that the input matrices contain only finite numbers. Disabling may give a performance gain, but may result in problems (result entirely NaNs) if the inputs do contain infinities or NaNs.

Returns:
x(M,) or (M, K) ndarray

The solution to the system `T x = b`. Shape of return matches shape of b.

`toeplitz`

Toeplitz matrix

Notes

The solution is computed using Levinson-Durbin recursion, which is faster than generic least-squares methods, but can be less numerically stable.

Examples

Solve the Toeplitz system T x = b, where:

```    [ 1 -1 -2 -3]       [1]
T = [ 3  1 -1 -2]   b = [2]
[ 6  3  1 -1]       [2]
[10  6  3  1]       [5]
```

To specify the Toeplitz matrix, only the first column and the first row are needed.

```>>> import numpy as np
>>> c = np.array([1, 3, 6, 10])    # First column of T
>>> r = np.array([1, -1, -2, -3])  # First row of T
>>> b = np.array([1, 2, 2, 5])
```
```>>> from scipy.linalg import solve_toeplitz, toeplitz
>>> x = solve_toeplitz((c, r), b)
>>> x
array([ 1.66666667, -1.        , -2.66666667,  2.33333333])
```

Check the result by creating the full Toeplitz matrix and multiplying it by x. We should get b.

```>>> T = toeplitz(c, r)
>>> T.dot(x)
array([ 1.,  2.,  2.,  5.])
```