Re: Re: Fourier and InverseFourier
- To: mathgroup at smc.vnet.net
- Subject: [mg75746] Re: [mg75589] Re: Fourier and InverseFourier
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Wed, 9 May 2007 04:45:10 -0400 (EDT)
- References: <f0v61b$8u4$1@smc.vnet.net> <f11gpl$kph$1@smc.vnet.net> <200705020756.DAA05199@smc.vnet.net> <f1c3qr$gou$1@smc.vnet.net> <200705060545.BAA03653@smc.vnet.net>
rob wrote:
> Daniel Lichtblau wrote:
> [...]
>>>>rob wrote:
>>>>
>>>>
>>>>>I kind person on this ng (Gulliet) recently contributed a
>>>>>convolution scheme which works nicely to plot x2 below:
>>>>>
>>>>>conv[f1_, f2_] := Module[{u}, Evaluate[Integrate[f1[u] f2[#
>>>>>- u], {u, 0, #}]] &]
>>>>>
>>>>>x2[t_] := convolve[Sin[t], Exp[-t]][t]
>>>>>
>>>>>Plot[x2[t], {t, 0, 15}, PlotRange -> All]
>>>>>
>>>>>Wondering if I could achieve the same thing in the freq.
>>>>>domain, I tried what I thought should give the same result
>>>>>in x3:
>>>>>
>>>>>fs = FourierTransform[Sin[t], t, w]
>>>>>fe = FourierTransform[Exp[-t], t, w]
>>>>>
>>>>>x3[t_] := InverseFourierTransform[fs*fe, w, t]
>>>>>
>>>>>Plot[x3[t], {t, 0, 15}, PlotRange -> All]
>>>>>
>>>>>I find this does not work, getting this err message and Mathematica
>>>>>(v.5.1) didn't stop in over 30 minutes.
>>>>>
>>>>>NIntegrate::ploss: Numerical integration stopping due to
>>>>>loss of precision. Achieved neither the requested
>>>>>PrecisionGoal nor AccuracyGoal; suspect one of the
>>>>>following: highly oscillatory integrand or the true value of
>>>>>the integral is 0. If your integrand is oscillatory on a
>>>>>(semi-)infinite interval try using the option
>>>>>Method->Oscillatory in NIntegrate.
>>>>>
>>>>>Since I'm using the internal integrals of
>>>>>InverseFourierTransform I don't know how to try the
>>>>>suggestion of Method->Oscillatory as the message suggests.
>>>>>
>>>>>I changed the Sin[t] to t and the process gave no err
>>>>>messages and finished in just a few minutes. The plot had
>>>>>axes but nothing on it.
>>>>>
>>>>>Can someone give me any hints as what might work?
>>
>>
>>Your explicit convolution integrates from 0 to t. Your attempt with
>>FT/IFT involves integrations from -infinity to infinity. In order to use
>> FT/IFT you'd need to have cutoff multipliers such as UnitStep, to get
>>results comparable to the explicit code. Also for functions like Exp[-t]
>>(with no cutoff) the FT does not exist because it grows too fast at
>>-infinity.
>>
>>
>>Daniel Lichtblau
>>Wolfram Research
>>
>
> Sir, thank you for the suggestion. I added the UnitStep[t]
> as below:
>
> fs = FourierTransform[UnitStep[t]*Sin[t], t, w]
> fe = FourierTransform[UnitStep[t]*Exp[-t], t, w]
>
> x3[t_] := InverseFourierTransform[fs*fe, w, t]
>
> Plot[x3[t], {t, 0, 15}, PlotRange -> All]
>
> The x3 now computes and plots but gives a narrowband sine
> output, different from the original convolution which is a
> wide band pulse (looks like a Gaussian pulse with an
> undershoot). So at least I'm getting an answer. Any
> suggestion which might yield the same result as the original
> convolution -- which I repeat below for clarity?
>
> conv[f1_, f2_] := Module[{u}, Evaluate[Integrate[f1[u] f2[#
> - u], {u, 0, #}]] &]
>
> x2[t_] := convolve[Sin[t], Exp[-t]][t]
>
> Plot[x2[t], {t, 0, 15}, PlotRange -> All]
>
> Thanks again, Rob
Devendra Kapadia and I looked into this. We tracked the problem with the
x3 computation to a bug in the Fourier transform computed for fs above.
I'll recode pieces for efficiency and typo fixes.
convolve[f1_, f2_, x_] := Module[{u}, Integrate[f1[u]*f2[x-u], {u,0,x}]]
x2[t_] = convolve[Sin, Exp[-#]&, t]
Now we try via transforms.
fs = FourierTransform[UnitStep[t]*Sin[t], t, w]
fe = FourierTransform[UnitStep[t]*Exp[-t], t, w]
x3[t_] = InverseFourierTransform[fs*fe, w, t]
The transform computation for fs gives
1/(Sqrt[2*Pi]*(1 - w^2))
This is missing some DiracDelta terms. A workaround for version 6.0 is
instead to do
fs = FourierTransform[HeavisideTheta[t]*TrigToExp[Sin[t]], t, w]
With this in place you should get a constant ratio of Sqrt[2*Pi] between
x2[t] and x3[t], for t>0. In version 5.2 a similar workaround can be
obtained using UnitStep instead of HeavisideTheta.
I apologize for the inconvenience. Will try to get it repaired toot sweet.
Daniel Lichtblau
Wolfram Research
- References:
- Re: Fourier and InverseFourier
- From: rob <josh2499@hotmail.com>
- Re: Fourier and InverseFourier
- From: rob <josh2499@hotmail.com>
- Re: Fourier and InverseFourier