![](/img/trans.png)
[英]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.