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