繁体   English   中英

Matlab循环矩阵编码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM