2015-04-05 25 views
2

我怎麼能轉移的載體c的條目是這樣的:行移位矢量值

c = [1; 2; 0]; 
x = [1; 2; 3]; 

y(1:3) = rightshift(c', 0:2) * x; 

% Should produce: 
% y(1) = [1; 2; 0]' * x; 
% y(2) = [0; 1; 2]' * x; 
% y(3) = [0; 0; 1]' * x; 

產生輸出向量y

回答

2

隨着toeplitz -

N = numel(c); 
y = triu(toeplitz(c,0:N-1).')*x 

或用mod & bsxfun -

N = numel(c) 
y = triu(c((mod(bsxfun(@minus,[0:N-1]',0:N-1),N)+1).'))*x 

或者只bsxfun -

N = numel(c); 
c_ext = [zeros(N-1,1) ; c(:)] 
y = c_ext(bsxfun(@plus,[N:-1:1]',[0:N-1]))*x 
+0

太棒了!謝謝。我真的嘗試過,但我想不起來^^ – displayname 2015-04-05 14:09:19

+0

@StefanFalk真的沒問題! – Divakar 2015-04-05 14:09:53

+0

難道是'toeplitz(c,0:N-1)'應該是'toeplitz(c,1:N)',因爲如果我從'0'開始,我會收到警告:「*警告:輸入列與輸入行的第一個元素不匹配,列贏得對角衝突*「但是從」1「開始工作完美無缺。 – displayname 2015-04-05 14:27:39

1

這是本質的卷積:

y = conv(c(end:-1:1), x); 
y = y(end-numel(c)+1:end); 
+0

這個答案也很好。但是(出於某種原因),我們不允許使用'convmtx()','conv()'和'for'-loops來實現這一點。必須說這個問題來自一項任務。 – displayname 2015-04-05 15:11:44