Re: Numerical Convolution Problem, different results by
- To: mathgroup at smc.vnet.net
- Subject: [mg73461] Re: [mg73436] Numerical Convolution Problem, different results by
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Sat, 17 Feb 2007 05:04:16 -0500 (EST)
- Reply-to: hanlonr at cox.net
$Version
5.2 for Mac OS X (June 20, 2005)
test=DSolve[{x'[t]==y[t],y'[t]==x[t],x[0]==1,
y[0]==2},{x[t],y[t]},t];
ff1[t_]=test[[1,1,2]] ;
ff2[t_]=test[[1,2,2]];
convolve[f_,g_,t_]:=Integrate[f[u]*g[t-u],{u,0,t}];
ff3[t_]=convolve[ff1,ff2,t];
ff4[t_]=convolve[ff3,ff1,t];
ff5[t_]=convolve[ff4,ff3, t];
#[10.]&/@{ff3,ff4,ff5}
{495595.48026965134, 3.597197195474734*^6, 6.531225687989658*^7}
test=NDSolve[{x'[t]==y[t], y'[t]==x[t],
x[0]==1, y[0]==2},{x[t], y[t]},{t,0,10}];
f1[t_]=test[[1,1,2]] ;
f2[t_]=test[[1,2,2]];
convolve[f_, g_, t_?NumericQ] :=
NIntegrate[f[u]*g[t - u],{u,0,t}];
f3[t_?NumericQ] := convolve[f1, f2, t];
f4[t_?NumericQ] := convolve[f3, f1, t];
f5[t_?NumericQ] := convolve[f4, f3, t];
#[10]&/@{f3,f4,f5}
{495594.80331690225, 3.5971920326086623*^6, 6.531213402318461*^7}
Bob Hanlon
---- "Zhao wrote:
> Hello,
> I guess I am running into a numerical problem when I am trying to
> perform Convolutions on InterpolatingFunctions .
> Firstly, I get the "exact" answer by performing the convolution with
> closed form functions and assign values to integral limits as shown as
> follows.
>
> test=DSolve[{x'[t]==y[t], y'[t]==x[t],x[0]==1,
> y[0]==2}, {x[t], y[t]}, t]
>
> ff1[t_]=test[[1]][[1]][[2]]
>
> ff2[t_]=test[[1]][[2]][[2]]
>
> convolve[f_,g_,t_]:=Integrate[f[u]*g[t-u],{u,0,t}]
>
> ff3[t_]=convolve[ff1,ff2,t]
>
> N[ff3[10]]
>
> ff4[t_]=N[convolve[ff3,ff1,t]]
>
> N[ff4[10]]
>
> ff5[t_]:=convolve[ff4,ff3, t]
>
> N[ff5[10]]
>
> The above code gives:
>
> 495595.
> 3.5972 10^6
>
> 6.53123 10^7
>
> However, when I calculate the same thing from the numerical route, it
> gives different result.
> < /FONT>< /FONT>
>
> test = NDSolve[{x'[t] == y[t],
>
> y'[t] == x[t], x[0] == 1, y[0] == 2}, {x[t], y[t]},
> {t, 0, 10}];
>
> f1[t_] = test[[1]][[1]][[2]];
>
> f2[t_] = test[[1]][[2]][[2]];
>
> convolve[f_, g_, t_?NumericQ] := N[NIntegrate[f[u]*g[t - u], {u, 0,
> t}]];
>
> f3[t_?NumericQ] := convolve[f1, f2, t];
>
> f3[10]
>
> f4[t_?NumericQ] := convolve[f3, f1, t];
>
> f4[10]
>
> f5[t_?NumericQ] := convolve[f4, f3, t];
>
> f5[10]
>
> It gives
>
> 495595.
>
> 4.79075 10^6
>
> 5.13256 10^17
>
> Even more interestingly, when I sent the same code over to friend to run
> it with Mathematica V3.0, the numerical solution rendered by the above
> code is fine. I need your help to unpuzzle the myth!
>
>
> Liang Zhao