将Toeplitz矩阵分解为两个循环矩阵的和(matlab / octave)

时间:2017-10-12 12:17:13

标签: matlab matrix

我必须求解线性系统Tx=b,其中T是n x n对称的toeplitz矩阵。任何toeplitz矩阵都可以分解为循环矩阵U和偏斜循环矩阵V之和,即T=U+V

这很有用,因为每个n x n实值循环矩阵C都有分解C=F*ΛF,其中F是n x n傅里叶矩阵,F *是它的共轭转置和{{1} }是C的特征值的对角矩阵。特征值可以计算为Λ=diag(λ0,λ1,...,λn-1),其中c_k是C的第一行的第k个元素,即λj=sum{from k=0 to n-1} c_k*exp(-2*pi*i*j*k/n) (j=0,...,n-1 and i is the imaginary unit)

此外,c=[c0,c1,...,cn-1]矩阵W被称为{ω} - 循环矩阵,如果它具有分解n x n,其中*是共轭转置符号,F是傅里叶矩阵,Λ是包含W的特征值的对角矩阵,W=Ω*F*ΛFΩΩ=diag{1,ω^(-1/n),ω^(-2/n),...,ω^(-(n-1)/n)}ω=exp(i*θ)。在我们的例子中,对于U(循环),ω= 1,对于V(偏斜循环),ω= -1。

因为在我的情况下,T是对称的,所以很容易计算U和V.让θ∈[-pi,pi]成为生成T的向量,即t=(t0,t1,...,tn-1),所以T=toeplitz(t)和{ {1}}。

我试图在matlab上以这种方式分解随机对称的toeplitz:我成功创建了U和V,验证了U + V == T;然后我计算了U的特征值(使用上面的公式)和U的分解,验证了U等于它的分解。但是在V的情况下,我计算的分解与V不同,我计算的特征值也不等于使用默认命令eig(V)计算的特征值;最后,即使使用默认命令计算的特征值,分解也不等于V,所以我在某处犯了错误,但我无法理解。

以下是我在测试中使用的代码。

U=toeplitz([t0,t1+tn-1,t2+tn-2,...,tn-1+t1])

1 个答案:

答案 0 :(得分:1)

这里有很多你可以更高效地工作(也就是说,大部分可以通过使用FFT和矩阵乘法而不是循环来代替),但是你遇到的具体问题是你和#39;在计算V的特征值时不使用-1的根,你使用了统一的根。

你想要的是

 eigV(j) = eigV(j) + v(k+1)*exp(-2*pi*1i*(2*j-1)*k/(2*n));