当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.solve_toeplitz用法及代码示例


本文简要介绍 python 语言中 scipy.linalg.solve_toeplitz 的用法。

用法:

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

使用 Levinson 递归求解 Toeplitz 系统

Toeplitz 矩阵有恒定的对角线,c 为第一列,r 为第一行。如果没有给出 r,则假定为 r == conjugate(c)

参数

c_or_cr 数组 或 (数组, 数组) 的元组

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

b (M,) 或 (M, K) 数组

T x = b 的右侧。

check_finite 布尔型,可选

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

返回

x (M,) 或 (M, K) ndarray

系统的解决方案T x = b.返回的形状匹配的形状b.

注意

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

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.solve_toeplitz。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。