对不起我是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]
答案 0 :(得分: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]
这对n很慢,我没有耐心把它运行到20岁。
答案 1 :(得分:1)
你的方法几乎正常。你只需要
确保在进入循环之前按值复制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]
编辑:虽然这有效,但是agentp的回答更简洁,我怀疑也更快。