# toeplitz


托普利茨矩阵

函数库: TyMath

# 语法

T = toeplitz(c,r)
T = toeplitz(r)

# 说明

T = toeplitz(c,r) 返回非对称托普利茨矩阵,其中 c 作为第一列,r 作为第一行。如果 c 和 r 的首个元素不同,toeplitz 将发出警告并使用列元素作为对角线。示例

T = toeplitz(r) 返回对称的托普利茨矩阵,其中:

  • 如果 r 是实数向量,则 r 定义矩阵的第一行;

  • 如果 r 是第一个元素为实数的复数向量,则 r 定义第一行,r' 定义第一列;

  • 如果 r 的第一个元素是复数,则托普利茨矩阵是抽取了主对角线的 Hermitian 矩阵,这意味着对于 i≠j 的情况,T[i,j]=conj(T[j,i])。主对角线的元素会被设置为 r(1)。示例

# 示例

创建对称的托普利茨矩阵
using TyMath
r = [1,2,3]
toeplitz(r)
3×3 Matrix{Float64}:
 1.0  2.0  3.0
 2.0  1.0  2.0
 3.0  2.0  1.0
创建非对称的托普利茨矩阵

创建具有指定的列和行向量的非对称托普利茨矩阵。因为列向量和行向量的首个元素不匹配,toeplitz 发出警告并使用列作为对角线上的元素。

using TyMath
c = [1,2,3,4]
r = [4,5,6]
toeplitz(c,r)
┌ Warning: Syslab:toeplitz:DiagonalConflict
4×3 Matrix{Float64}:
 1.0  5.0  6.0
 2.0  1.0  5.0
 3.0  2.0  1.0
 4.0  3.0  2.0

创建包含复数行和列向量的托普利茨矩阵。

c = [1+3im,2-5im,-1+3im]
r = [1+3im,3-1im,-1-2im]
T = toeplitz(c,r)
3×3 Matrix{ComplexF64}:
  1.0+3.0im  3.0-1.0im  -1.0-2.0im
  2.0-5.0im  1.0+3.0im   3.0-1.0im    
 -1.0+3.0im  2.0-5.0im   1.0+3.0im 
使用 toeplitz 函数创建循环矩阵

您可以使用 toeplitz 创建循环矩阵。循环矩阵在循环卷积等应用中使用。

使用 toeplitz 从向量 v 创建循环矩阵。

using TyMath
v = [9,1,3,2]
toeplitz([v[1];reverse(v[2:end])], v)
4×4 Matrix{Float64}:
 9.0  1.0  3.0  2.0
 2.0  9.0  1.0  3.0
 3.0  2.0  9.0  1.0
 1.0  3.0  2.0  9.0

通过使用 toeplitz 为卷积构建循环矩阵来执行离散时间的循环卷积。

定义周期性输入 x 和系统响应 h。

x = [1,8,3,2,5]
h = [3,5,2,4,1]

构建列向量 c 以创建循环矩阵,其中 length(c) = length(h)。

c = [x[1] ;reverse(x[end-length(h)+2:end])]
5-element Vector{Int64}:
1
5
2
3
8
r = x

使用 toeplitz 构建卷积矩阵 xConv。使用 h*xConv 求卷积。

xConv = toeplitz(c,r)
5×5 Matrix{Float64}:
 1.0  8.0  3.0  2.0  5.0
 5.0  1.0  8.0  3.0  2.0
 2.0  5.0  1.0  8.0  3.0
 3.0  2.0  5.0  1.0  8.0
 8.0  3.0  2.0  5.0  1.0
h'*xConv
1×5 adjoint(::Vector{Float64}) with eltype Float64:
 52.0  50.0  73.0  46.0  64.0
使用 Toeplitz 的离散时间卷积

通过使用 toeplitz 为卷积构建数组,执行离散时间卷积。

定义输入 x 和系统响应 h。

using TyMath
x = [1,8,3,2,5]
h = [3,5,2]

通过用 0 填充 x 构建 r。r 的长度是卷积长度 x + h - 1。

r = vec([x;zeros(1,length(h)-1)'])
7×1 Vector{Float64}:
1.0
8.0
3.0
2.0
5.0
0.0
0.0

构建列向量 c。将第一个元素设置为 x(1),因为该列确定对角线。填充 c,因为 length(c) 必须等于卷积的 length(h)。

c = vec([x[1];zeros(1,length(h)-1)'])

使用 toeplitz 构建卷积矩阵 xConv。然后,使用 h*xConv 求卷积

xConv = toeplitz(c,r)
3×7 Matrix{Float64}:
1.0  8.0  3.0  2.0  5.0  0.0  0.0
0.0  1.0  8.0  3.0  2.0  5.0  0.0
0.0  0.0  1.0  8.0  3.0  2.0  5.0
h'*xConv
ans =
3.0  29.0  51.0  37.0  31.0  29.0  10.0

使用 conv 检查结果是正确的。

conv(x,h)
7-element Vector{Int128}:
3
29
51
37
31
29
10

# 输入参数

c - 托普利茨矩阵的列
标量|向量

托普利茨矩阵的列,指定为标量或向量。如果 c 和 r 的首个元素不同,toeplitz 将使用列元素作为对角线。

如果您提供的 n 小于 3,则 magic 将返回非幻方矩阵或退化幻方矩阵 1 和 [ ]。

数据类型: Float16 | Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt

复数支持:

r - 托普利茨矩阵的行
标量|向量

托普利茨矩阵的行,指定为标量或向量。如果 c 和 r 的首个元素不同,则 toeplitz 将使用列元素作为对角线。

数据类型: Float16 | Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 UInt

复数支持:

# 详细信息

托普利茨矩阵

托普利茨矩阵是对角线为常量的矩阵,这意味着沿对角线的所有元素都具有相同的值。对于托普利茨矩阵 A,Ai,j = ai–j,结果的形式如下:

# 另请参阅

hankel | cholupdate