MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Factor 2 error in Inverse Laplace Transform

  • To: mathgroup at smc.vnet.net
  • Subject: [mg51381] Re: Factor 2 error in Inverse Laplace Transform
  • From: p-valko at tamu.edu (Peter Valko)
  • Date: Fri, 15 Oct 2004 02:47:50 -0400 (EDT)
  • References: <ck87ta$9mf$1@smc.vnet.net> <ckajqc$m6v$1@smc.vnet.net> <ckfsgg$ius$1@smc.vnet.net> <cklmnu$f3d$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Steven/Maxim,
I agree.
Peter

steve at smc.vnet.net (Steven M. Christensen) wrote in message news:<cklmnu$f3d$1 at smc.vnet.net>...
> I do not question your suggestion to replace the interval of
> integration [0,Infinity] with [-eps,Infinity]. Curiously, Mathematica
> does exactly that for the direct transform; if we pass it the
> (indeterminate?) expression DiracDelta[t]*Log[t], we can see the
> evaluation path:
> 
> In[1]:=
> LaplaceTransform[DiracDelta[t]*Log[t], t, p]
> 
> Out[1]=
> Limit[Integrate[(DiracDelta[t]*Log[t])/E^(p*t),
>     {t, System`LaplaceTransformDump`low$38, Infinity},
>     Assumptions -> p > 0 && System`LaplaceTransformDump`low$38 < 0,
>     GenerateConditions -> False, PrincipalValue -> False],
>   System`LaplaceTransformDump`low$38 -> 0, Direction -> 1]
> 
> The low$38 parameter is your -eps. Taking the limit is a more accurate
> way than making the substitution eps->0. Consider the next integral:
> 
> In[2]:=
> Assuming[p>0 && eps>0,
>   Integrate[Log[t]*E^(-p*t), {t, -eps, Infinity}]]
> 
> Out[2]=
> (Gamma[0, (-eps)*p] + E^(eps*p)*(I*Pi + Log[eps]))/p
> 
> It would be incorrect to substitute eps->0, since this expression is
> undefined at 0. However, Limit[%2,eps->0] gives the correct value for
> LaplaceTransform[Log[t],t,p].
> 
> The substitution seems to be safe for DiracDelta[t], because then the
> integral just samples the value at 0 and eps simply will not appear in
> the output. Therefore, you have either to take the limit or to
> separate the terms containing DiracDelta from the rest of the
> integrand before making the substitution eps->0, because the integrand
> may contain both generalized and ordinary functions, e.g.
> DiracDelta[t]+Log[t].
> 
> Maxim Rytin
> m.r at inbox.ru
> 
> p-valko at tamu.edu (Peter Valko) wrote in message news:<ckfsgg$ius$1 at smc.vnet.net>...
> > Maxim,
> > 
> > As far as your Log example is considered, it really shows
> > inconsistency.
> > The other examples are also interesting, but you make very general
> > comments and they bother me a bit. Somehow I feel they are unfair.
> > 
> > For instance, in your second example, first you consider the
> > input-output pair
> > In[1]=
> > Integrate[DiracDelta[x - a], {x, 0, 1}]
> > Out[1]=
> > UnitStep[1 - a]*UnitStep[a]
> > then you are substituting a->1 into the result and Mathematica gives 0.
> > 
> > You compare this to the pair 
> > In[2]=
> > Integrate[DiracDelta[x], {x, 0, 1}]
> > Out[2]=
> > 1/2
> > 
> > and draw the conclusion that something is wrong.
> > I respectfully disaggree with you.
> > 
> > In the Help of Integrate, Mathematica explicitely warns us:
> > "When an integrand depends on a parameter, the indefinite integral
> > should be considered valid for "generic" values of the parameter. For
> > certain values the reported integral may be meaningless,..."
> > 
> > In general, it is extremely easy to ask Mathematica to "derive" a parametric
> > result, and then to substitute something very special into the
> > parameter to obtain contradiction.
> > 
> > Personally, I am not really interested in that. 
> > My examples try to mimic the situation when a user wants to solve a
> > specific problem, arrives at a Laplace transform and tries to find the
> > original using the "InverseLaplaceTransform" service of Mathematica.
> > In such a situation a factor of 2 error is dangerous and I think with
> > a little modification Mathematica could avoid it.
> > 
> > For instance here is Problem 3:
> > InverseLaplaceTransform[s/(1+s)^(3/2),s,t]
> > It gives an answer that is wrong by a factor of two, while  
> > Problem 3a:
> > InverseLaplaceTransform[Apart[s/(1+s)^(3/2)],s,t]
> > gives the right answer because then Mathematica finds other rules to apply and
> > they are correct.
> >  
> > I suggest to put a little "safeguard" into InverseLaplaceTransform and
> > force it to avoid this trap. This can be done without redefining
> > DiracDelta and UnitStep. (Those are used extensively by Mathematica and
> > therefore any change would impact the whole system in too many ways.)
> > 
> > Regards
> > Peter
> > 
> > 
> > 
> > ab_def at prontomail.com (Maxim) wrote in message news:<ckajqc$m6v$1 at smc.vnet.net>...
> > > p-valko at tamu.edu (Peter Valko) wrote in message news:<ck87ta$9mf$1 at smc.vnet.net>...
> > > > Hi,
> > > > 
> > > > InverseLaplaceTransform is an extremely useful part of Mathematica
> > > > (since v 4.1).
> > > > However, in the following simple problem it gives the wrong answer:
> > > > Problem 1:   
> > > > InverseLaplaceTransform[s/(s+1),s,t]
> > > > -1/(2*E^t)+DiracDelta[t]
> > > > where the factor 2 is completely wrong.
> > > > 
> > > > To see that I slightly rewrite Problem 1 into 
> > > > Problem 1a:   
> > > > InverseLaplaceTransform[Apart[s/(s+1)],s,t]
> > > > and then I get the correct answer:
> > > > -E^(-t)+DiracDelta[t]
> > > > 
> > > > Of course one can "Unprotect" InverseLaplaceTransform and teach it to
> > > > give the correct answer but that is not the point.
> > > > (Also one can start a long debate about the meaning of DiracDelta in
> > > > Mathematica, but that is also not the point here. )
> > > > 
> > > > There are several similar simple examples when the wrong factor of two
> > > > shows up, for instance
> > > > Problem 2:    
> > > > InverseLaplaceTransform[ s ArcTan[1/s],s,t]
> > > > 
> > > > Using the Trace one can find out that all these "factor 2" errors have
> > > > a common origin.
> > > > Solving Problem 1 Mathematica calculates the convolution integral
> > > > 
> > > >  Integrate[E^(-t+x)*Derivative[1][DiracDelta][x],{x,0,t}]
> > > > 
> > > > and because the lower limit is exactly zero,the factor 2 shows up in 
> > > > -1/(2*E^t), that is Mathematica "halves" the Dirac delta and all its
> > > > derivatives at the origin.
> > > > 
> > > > I think the InverseLaplaceTransform function could be much improved if
> > > > the above convolution integral would be evaluated more carefully.
> > > > 
> > > > For instance, doing it in two steps:
> > > >  res1=Integrate[E^(-t+x)*Derivative[1][DiracDelta][x],{x,-eps,t},
> > > >  Assumptions -> eps>0];
> > > >  res2=res1/.eps -> 0
> > > > would give the right result.
> > > > (This caution is necessary only, if generalized functions are involved
> > > > in the integration.)
> > > > 
> > > > I wonder if further examples/suggestions are welcome in this group
> > > > regarding InverseLaplaceTransform???
> > > > 
> > > > Peter
> > > 
> > > I'd say that this is two messes mixed together. One is a rather poor
> > > implementation of integral transforms, especially when there are
> > > generalized functions involved. For example:
> > > 
> > > In[1]:=
> > > LaplaceTransform[InverseLaplaceTransform[Log[p], p, t], t, p] - Log[p]
> > > LaplaceTransform[InverseLaplaceTransform[PolyGamma[p], p, t], t, p] -
> > > PolyGamma[p]
> > > 
> > > Out[1]=
> > > EulerGamma
> > > 
> > > Out[2]=
> > > EulerGamma
> > > 
> > > We can see that LaplaceTransform/InverseLaplaceTransform aren't
> > > consistenly defined for these functions (here Mathematica doesn't
> > > internally take integrals of distributions). Another issue is the
> > > question of how the integral of DiracDelta on [0,a] should be
> > > interpreted:
> > > 
> > > In[3]:=
> > > Integrate[DiracDelta[x], {x, 0, 1}]
> > > Integrate[DiracDelta[x - a], {x, 0, 1}]
> > > Integrate[DiracDelta[x - 1], {x, 1, 2}]
> > > 
> > > Out[3]=
> > > 1/2
> > > 
> > > Out[4]=
> > > UnitStep[1 - a]*UnitStep[a]
> > > 
> > > Out[5]=
> > > 0
> > > 
> > > The value of the first integral is by convention taken to be 1/2;
> > > however, substituting a=0 into Out[4] we obtain 1, and making the
> > > change of variables x->x-1 (the third integral) we get 0. Similarly
> > > for the integrals of the DiracDelta derivatives:
> > > 
> > > In[6]:=
> > > Integrate[DiracDelta'[x]*phi[x], {x, -eps, Infinity}]
> > > Integrate[DiracDelta'[x]*phi[x], {x, 0, Infinity}]
> > > Integrate[DiracDelta'[x]*x, {x, 0, Infinity}]
> > > 
> > > Out[6]=
> > > (-DiracDelta[eps])*phi[0] - phi'[0]
> > > 
> > > Out[7]=
> > > 0
> > > 
> > > Out[8]=
> > > -(1/2)
> > > 
> > > The value of the first integral for eps<0 is incorrect in any case,
> > > and Out[7] and Out[8] are not consistent with each other.
> > > 
> > > Maxim Rytin
> > > m.r at inbox.ru


  • Prev by Date: Re: Sorting a list of pairs on the second elements
  • Next by Date: Re: Re: Re: Re: normal distribution random number generation
  • Previous by thread: Re: Re: Factor 2 error in Inverse Laplace Transform
  • Next by thread: Generating r-combination or r-permutations with replacement.