2017-02-02 42 views
2

실례합니다. Wolfram을 처음 사용하고 있습니다. 저는 사람들이 볼프람에서 함수 자체의 컨볼 루션 (convolution)에 관해 질문하는 것을 보았습니다. 그러나, 나는 루프에서 여러 번하는 방법을 궁금해. 즉 f20 * 즉 f * f * f * f * .... f를 총 20f로하고 싶습니다. 그것을 구현하는 방법?Wolfram에서 여러 번 함수 자체의 컨볼 루션을 계산하는 방법은 무엇입니까?

여기 내 생각입니다. 물론 작동하지 않습니다 ....

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

+0

n은 19 .... –

+0

이어야합니다. n = 19 일 때 기계 정밀도를 극복 할 수있는 방법이 있습니까? –

답변

2

어쩌면이 개정 후?

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

enter image description here

그게 아니라면 바로 어쩌면 n을 위해 손으로 무엇을 얻을 보여 = 2 또는 3이 N 매우 느린 도착

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

enter image description here

, I 20에 그것을 밖으로 실행하는 인내심을 가지고 있지 않다.

+0

매우 좋습니다! 고마워요! –

+0

n = 20으로 실행하면 버그가 발생합니다. n = 20 일 때 그래프가 이상합니다. –

+0

아마도 정밀 문제가 발생했을 것입니다. '0.1''' 정확한'1/10'을 만들어서 다항식의 정확한 합리적인 계수를 얻으십시오. (플롯은 여전히 ​​기계 정밀도로 작동하므로 문제가있을 수 있습니다.) – agentp

1

당신의 approa ch는 거의 효과가 있습니다.

  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의 대답은 더 consise이고 나는 또한 빠른 의심

이 언급 한 변화와 코드입니다.

+0

아주 좋습니다! 정말 작동합니다! 고마워요! –