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_cr : array_like or tuple of (array_like, array_like)
The vector
c
, or a tuple of arrays (c
,r
). Whatever the actual shape ofc
, it will be converted to a 1D 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 ofr
, it will be converted to a 1D array.b : (M,) or (M, K) array_like
Righthand side in
T x = b
.check_finite : bool, 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.See also
toeplitz
 Toeplitz matrix
Notes
The solution is computed using LevinsonDurbin recursion, which is faster than generic leastsquares 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.
>>> 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.])