赞
踩
用法:
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.])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。