[英]Decomposition of a Toeplitz matrix into sum of two circulant matrices (matlab/octave)
[英]Matlab coding for circulant matrix
我从van Loan的《 科学计算简介 》一书中获得了Matlab函数。 它产生矩阵C,其中每一行是前一行,每个元素向右移动一个。 我想对其进行修改,以便向右移动,但是我在逻辑上遇到了一些麻烦。
特别是,下面的循环对右移有意义吗?
for i=2:n
C(i,:)=[C(i-1, n-2) C(i-1, 1:n-1)];
end
function C= circulantShift(a) %shifts to left
a=[1 2 3 4];
n=length(a);
C=zeros(n,n);
C(1,:)=a;
for i=2:n
C(i, :)=[C(i-1, n) C(i-1, 1:n-1)];
end
为了向左移动,您需要使用:
C(i,:)=[C(i-1, 2:n) C(i-1, 1)];
C =
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
首先: circulantShift(a)
函数向右移动,而不是向左移动。
逻辑如下:在matlab [ab]
中进行水平串联。 因此, [C(i-1, n) C(i-1, 1:n-1)]
建立了一条线,该线由上一行中的第n个(最后一个)数字组成,后接前一个1:n-1个数字在上面的行中。 这显然是向右的循环移位。
如果要向左移动,请执行相反的操作。 您从上一行中选择第2至第n个数字,然后是上一行中的第一个数字。 像这样:
[C(i-1, 2:n) C(i-1, 1)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.