2015-04-05 2 views

ответ

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

+0

@StefanFalk Не проблема! – Divakar

+0

Может быть, что 'toeplitz (c, 0: N-1)' должно быть 'toeplitz (c, 1: N)', потому что, если я начинаю с '0', я получаю предупреждение: * * Внимание: первый элемент столбец ввода не соответствует первому элементу входной строки. Столбец выигрывает диагональный конфликт. * «но начиная с« 1 »работает безупречно. – displayname

1

Это существенно свертка:

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

Этот ответ также прекрасен. Но (по какой-то причине) нам не разрешалось использовать 'convmtx()', 'conv()' и 'for'-loop для этого. Надо сказать, что этот вопрос исходил из задания. – displayname

Смежные вопросы