2015-01-08 108 views
0

我有這個Matlab函數來自van Loan的書科學計算導論。 它產生一個矩陣C,其中每行是前一行,每個元素右移一位。我想修改它,以便轉移到右側,但我在邏輯上遇到了一些麻煩。循環矩陣的Matlab編碼

特別是,下面的循環對右移是否有意義? circulantShift(a)轉移功能的權利,而不是左:

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 
+0

你的意思是「讓換檔到左邊」?在'for'循環之後嘗試'wrev(C)'。 – David

+0

@David無法得到這個工作,甚至是一個matlab函數? – codeAligned

+0

對不起,'wrev'是矢量,請嘗試'fliplr'來代替。 – David

回答

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 
+0

這與寵物偵探的答案是一樣的,不過謝謝你 – codeAligned

1

第一。

邏輯如下: 在matlab中做了一個橫向連接。所以[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)]