当前位置:   article > 正文

Python scipy linalg.solve_toeplitz_scipy.linalg.solve_toeplitz

scipy.linalg.solve_toeplitz

用法:
scipy.linalg.solve_toeplitz(c_or_cr, b, check_finite=True)
使用Levinson递归求解Toeplitz系统

Toeplitz矩阵具有恒定的对角线,其中c为第一列,r为第一行。如果没有给出rr == conjugate©假设。

参数:
c_or_cr:array_like 或 tuple of (array_like, array_like)
向量c,或数组元组(c,r)。不论实际形状c,它将转换为一维数组。如果未提供,r = conjugate©假设;在这种情况下,如果c [0]为实,则Toeplitz矩阵为Hermitian。 r [0]被忽略; Toeplitz矩阵的第一行是[c[0], r[1:]]。不论实际形状r,它将转换为一维数组。

b:(M,) 或 (M, K) array_like
Right-hand侧入T x = b。

check_finite:bool, 可选参数
是否检查输入矩阵仅包含有限数。禁用可能会提高性能,但是如果输入中确实包含无穷大或NaN,则可能会导致问题(完全导致NaN)。

返回值:
x:(M,)或(M,K)ndarray
系统解决方案T x = b。返回形状与b形状匹配。

注意:
该解决方案是使用Levinson-Durbin递归计算的,该递归比通用的least-squares方法要快,但数值稳定性较差。

例子:
求解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矩阵,只需要第一列和第一行。

>>> 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.])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/182744
推荐阅读
相关标签
  

闽ICP备14008679号