Как рассчитать свертку функции с самим собой несколько раз в Вольфраме?
Извините, я новичок в Вольфраме. Я видел людей, задающих вопросы о том, как сделать свертку функции с самим собой в 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.
Ваш подход почти работает. Вы просто должны
не забудьте скопировать
f
по значению до входа в цикл, потому что в противном случае вы сталкиваетесь с бесконечной рекурсией.Назначить результат
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]
Изменить: Хотя это работает, ответ агента является более кратким, и я подозреваю, также быстрее.