如何在 Wolfram 中多次计算函数与自身的卷积?

How to calculate the convolution of a function with itself multiple times in Wolfram?

对不起,我是 Wolfram 的新手。我见过有人问有关如何在 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]

有人能帮帮我吗?

我修改agentp代码后的新代码

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]

My buggy image

也许是这个?

 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]

这对于 n 来说变得非常慢,我没有耐心 运行 它达到 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]

编辑:虽然这可行,但 agentp 的回答更简洁,我怀疑也更快。