如何在 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。
您的方法即将奏效。你只需要
确保在进入循环之前按值复制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 的回答更简洁,我怀疑也更快。
对不起,我是 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。
您的方法即将奏效。你只需要
确保在进入循环之前按值复制
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 的回答更简洁,我怀疑也更快。