scipy.linalg.

solve_toeplitz#

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

使用 Levinson 遞迴求解 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 = 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.])