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 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 ofr
, it will be converted to a 1-D array.b : (M,) or (M, K) array_like
Right-hand 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 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.
>>> 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.])