我怎麼能轉移的載體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
?
我怎麼能轉移的載體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
?
隨着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
這是本質的卷積:
y = conv(c(end:-1:1), x);
y = y(end-numel(c)+1:end);
這個答案也很好。但是(出於某種原因),我們不允許使用'convmtx()','conv()'和'for'-loops來實現這一點。必須說這個問題來自一項任務。 – displayname 2015-04-05 15:11:44
太棒了!謝謝。我真的嘗試過,但我想不起來^^ – displayname 2015-04-05 14:09:19
@StefanFalk真的沒問題! – Divakar 2015-04-05 14:09:53
難道是'toeplitz(c,0:N-1)'應該是'toeplitz(c,1:N)',因爲如果我從'0'開始,我會收到警告:「*警告:輸入列與輸入行的第一個元素不匹配,列贏得對角衝突*「但是從」1「開始工作完美無缺。 – displayname 2015-04-05 14:27:39