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

时间:2017-02-02 18:57:30

标签: math wolfram-mathematica wolframalpha

对不起我是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

2 个答案:

答案 0 :(得分:2)

也许这个?

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

enter image description here

如果不正确可能会显示你手动获得的n = 2或3。

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

enter image description here

这对n很慢,我没有耐心把它运行到20岁。

答案 1 :(得分:1)

你的方法几乎正常。你只需要

  1. 确保在进入循环之前按值复制f,否则您将面临无限递归。

  2. Convolve的结果分配给带参数的函数。

  3. 这是带有上述更改的代码:

    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的回答更简洁,我怀疑也更快。