scipy.linalg.

solve_toeplitz#

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

求解方程 T @ x = b 中的 x,其中 T 是由 c_or_cr 定义的 Toeplitz 矩阵。

Toeplitz 矩阵具有常数对角线,其中 c 是其第一列,r 是其第一行。如果未给出 r,则假定 r == conjugate(c)

警告

从 SciPy 1.17 开始,多维输入将被视为批次,而不是进行 ravel 操作。为保留现有行为,请在将参数传递给 solve_toeplitz 之前对其进行 ravel

参数:
c_or_crarray_like 或 (array_like, array_like) 元组

向量 c,或一个数组元组 (c, r)。如果未提供 r,则假定 r = conjugate(c);在此情况下,如果 c[0] 是实数,则 Toeplitz 矩阵是 Hermitian 矩阵。r[0] 被忽略;Toeplitz 矩阵的第一行是 [c[0], r[1:]]

b(M,) 或 (M, K) array_like

`T x = b` 中的右侧。

check_finitebool, 可选

是否检查输入矩阵只包含有限数。禁用此选项可能会提高性能,但如果输入包含无穷大或 NaN,则可能导致问题(结果全部为 NaN)。

返回:
x(M,) 或 (M, K) ndarray

系统 T @ x = b 的解。返回值的形状与 b 的形状匹配。

另请参阅

toeplitz

Toeplitz 矩阵

注释

该解使用 Levinson-Durbin 递归计算,它比通用的最小二乘法更快,但在数值稳定性方面可能较差。

示例

求解 Toeplitz 系统 T @ x = b,其中

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

要指定 Toeplitz 矩阵,只需要第一列和第一行。

>>> 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])

通过创建完整的 Toeplitz 矩阵并将其乘以 x 来检查结果。我们应该得到 b

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