我必须求解线性系统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])
答案 0 :(得分:1)
这里有很多你可以更高效地工作(也就是说,大部分可以通过使用FFT和矩阵乘法而不是循环来代替),但是你遇到的具体问题是你和#39;在计算V的特征值时不使用-1的根,你使用了统一的根。
你想要的是
eigV(j) = eigV(j) + v(k+1)*exp(-2*pi*1i*(2*j-1)*k/(2*n));