Matlab编码循环矩阵

时间:2015-01-08 21:48:05

标签: matlab 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

2 个答案:

答案 0 :(得分:1)

要转移到左侧,您需要使用:

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

答案 1 :(得分:1)

首先:函数circulantShift(a)向右移动,而不是向左移动。

逻辑如下: 在matlab中[a b]执行水平连接。因此[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)]