Как рассчитать свертку функции с самим собой несколько раз в Вольфраме?

Извините, я новичок в Вольфраме. Я видел людей, задающих вопросы о том, как сделать свертку функции с самим собой в Wolfram. Тем не менее, мне интересно, как сделать это несколько раз в цикле. То есть я хочу сделать f20*, т.е. f * f * f * f *.... f на общую сумму 20 f. Как это реализовать?

Вот мое мышление. Конечно не работают....

f[x_] := Piecewise[{{0.1`, x >= 0 && x <= 10}, {0, x < 0}, {0, x > 10}}];
g = f;
n = 19;
For[i = 1, i <= n, i++, g = Convolve[f[x], g, x, y]]; Plot[
   g[x], {x, -10, n*10 + 10}, PlotRange -> All]

Кто-нибудь может мне помочь?

Мой новый код после пересмотра кода агента

f[x_] := Piecewise[{{0.1, x >= 0 && x <= 10}, {0, x < 0}, {0,x > 10}}];
n = 19;
res = NestList[Convolve[#, f[x], x, y] /. y -> x &, f[x], n]; 
Plot[res, {x, -10, (n + 1)*10 + 10}, PlotRange -> All,PlotPoints -> 1000]

Мой глючный образ

2 ответа

Решение

Может быть, это?

 Nest[ Convolve[#, f[x], x, y] /. y -> x  &, f[x] , 3]

Если это не правильно, возможно, покажите, что вы получаете вручную для n=2 или 3.

res = NestList[ Convolve[#, f[x], x, y] /. y -> x  &, f[x] , 10];
Plot[res, {x, 0, 100}, PlotRange -> All]

это становится очень медленным, у меня нет терпения, чтобы запустить его до 20.

Ваш подход почти работает. Вы просто должны

  1. не забудьте скопировать f по значению до входа в цикл, потому что в противном случае вы сталкиваетесь с бесконечной рекурсией.

  2. Назначить результат Convolve к функции, которая принимает параметр.

Это код с упомянутыми изменениями:

f[x_] := Piecewise[{{0.1, x >= 0 && x <= 10}, {0, x < 0}, {0, x > 10}}];
g[x_] = f[x];
n = 20;
For[i = 1, i <= n, i++, g[y_] = Convolve[f[x], g[x], x, y]];
Plot[g[x], {x, -10, n*10 + 10}, PlotRange -> All]

Изменить: Хотя это работает, ответ агента является более кратким, и я подозреваю, также быстрее.

Другие вопросы по тегам