簡體   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