From: Chris Chiasson on
And on a related note, does anyone know why Mathematica handles
DiracDelta'[x] in this way:

In[1]:=
D[UnitStep[x],{x,2}]
Integrate[%,{x,-1,1}]
Out[1]=
Derivative[1][DiracDelta][x]
Out[2]=
0

On 6/7/06, Chris Chiasson <chris(a)chiasson.name> wrote:
> Andrzej,
>
> I had no idea it could be so convoluted!
>
> Just, let's say, for kicks... what if the treatment of Integrate was
> to always exclude the DiracDelta from the integral if it occurs on an
> endpoint? Do you think that would be as "consistent" as Maxim's
> approach?
>
> On 6/7/06, Andrzej Kozlowski <akoz(a)mimuw.edu.pl> wrote:
> > *This message was transferred with a trial version of CommuniGate(tm) Pro*
> >
> > On 8 Jun 2006, at 07:02, Chris Chiasson wrote:
> >
> > >> I confess that I never noticed that Integrate and DiracDelta in
> > >> Mathematica behaved like this at end points. It seems to me that the
> > >> Piecewise approach, which assumes that boundary points are treated
> > >> the same as interior points, is the more natural. But Chris obviously
> > >> was not interested in the answer to this particular problem but in
> > >> more general matters. It is trivial to modify the behaviour of the
> > >> package in this respect (by adding ones own rules for handling
> > >> DiracDelta) to make it conform with what Mathematica does, if one
> > >> really wanted to. But my main point was that the package is
> > >> interesting in its own right and it seems to me that anyone seriously
> > >> interested in this topic would have already taken a look at it. Why,
> > >> even people not seriously interested in it, like myself, have done so
> > >> and found interesting and instructive things in it.
> > >>
> > >> Andrzej
> > >
> > > I think Mathematica's Integrate does this to preserve the identity:
> > > Integrate[f[x],{x,a,c}]==Integrate[f[x],{x,a,b}]+Integrate[f[x],
> > > {x,b,c}]
> > >
> > > There is a danger of violating this when using PiecewiseIntegrate:
> > >
> > > In[1]:=
> > > <<PiecewiseIntegrate.m
> > > load[x_]=-9*10^3*DiracDelta[x]-
> > > Piecewise[{{x*10*(10^3/3),0\[LessEqual]x\[LessEqual]3}}]-6*10^3*
> > > DiracDelta[x-5]
> > > Integrate[load[x],{x,-10,10}]
> > > PiecewiseIntegrate[load[x],{x,-10,10}]
> > > {PiecewiseIntegrate[load[x],{x,-10,0}],PiecewiseIntegrate[load[x],
> > > {x,0,5}],
> > > PiecewiseIntegrate[load[x],{x,5,10}]}
> > > Plus@@%
> > > Out[2]=
> > > -6000*DiracDelta[-5 + x] - 9000*DiracDelta[x] -
> > > Piecewise[{{(10000*x)/3, 0 <= x <= 3}}]
> > > Out[3]=
> > > -30000
> > > Out[4]=
> > > -30000
> > > Out[5]=
> > > {-9000,-30000,-6000}
> > > Out[6]=
> > > -45000
> > > --
> > > http://chris.chiasson.name/
> >
> > Chris
> >
> > I realised this. However, I do not consider this identity correct in
> > this context. Mathematica often treats generalised functions as if
> > they were ordinary functions and this often lead to contradictions,
> > or at least unpleasant behaviour. Even if we for the time being
> > ignore the mathematical meaning of distributions you can get
> > inconsistent results such as this:
> >
> >
> > {Integrate[DiracDelta[x], {x, -1, 0}],
> > Integrate[DiracDelta[x], {x, -1, t}] /. t -> 0}
> >
> >
> > {1/2, 1}
> >
> > Compare this with:
> >
> > <<Piecewise`
> >
> >
> > {PiecewiseIntegrate[DiracDelta[x], {x, -1, 0}],
> > PiecewiseIntegrate[DiracDelta[x], {x, -1, t}] /. t -> 0}
> >
> >
> > {1,1}
> >
> > Or looking at it form another angle:
> >
> >
> > Limit[PiecewiseIntegrate[DiracDelta[x], {x, -1, t}],
> > t -> 0, Direction -> 1]
> >
> > 0
> >
> >
> > Limit[PiecewiseIntegrate[DiracDelta[x], {x, -1, t}],
> > t -> 0, Direction -> -1]
> >
> > 1
> >
> > So the Integral returned by Mathematica is not continuous either form
> > the left or from the right. The integral returned by
> > Piecewiseintegrate is continuous from the right, which is what is the
> > usual assumption in mathematical texts. But there is something even
> > worse about he Mathematica implementation.
> >
> > In fact, if you write out the formula for the sum of integrals using
> > limits you will see that it holds for PiecwiseIntegrate too.
> > In fact, generalised functions are not "functions" (they have no
> > values at points) but are usually defined as functionals on a certain
> > space of functions on real line (there is also another approach in
> > terms of non-standard analysis, but that is not implemented in
> > Mathematica). These functionals are defined in terms of integrals
> > over the entire real line so formally you cannot integrate the
> > DiracDelta over a finite interval; you can only integrate it from -
> > Infinity to +Infinity, because that is how the functional is defined.
> > Integrals over finite intervals can then be defined as integrals over
> > the whole real line of products of DiracDelta and the characteristic
> > functions of these intervals. But look what happens when you use
> > Mathematica:
> >
> >
> > {Integrate[DiracDelta[x]*Boole[0 <= x <= 2],
> > {x, -Infinity, Infinity}], Integrate[DiracDelta[x],
> > {x, 0, 2}]}
> >
> >
> > {1, 1/2}
> >
> >
> > But these ought to be the same by definition! Again compare this with
> > PiecewiseIntegrate
> >
> >
> > {PiecewiseIntegrate[DiracDelta[x]*Boole[0 <= x <= 2],
> > {x, -Infinity, Infinity}], PiecewiseIntegrate[DiracDelta[x],
> > {x, 0, 2}]}
> >
> >
> > {1,1}
> >
> >
> > From the mathematical point of view I have no doubt here: Maxim got
> > it right and Mathematica got it wrong. Of course one can always say
> > that these are only different conventions and as is usual with
> > various conventions, once you understand them and get used to them
> > you usually find that you can use them equally successfully. Still,
> > there are just too many departures form standard mathematics for me
> > to be comfortable with the way Mathematica behaves in the above
> > examples.
> >
> > Andrzej Kozlowski
> >
>
>
> --
> http://chris.chiasson.name/
>


--
http://chris.chiasson.name/

From: Andrzej Kozlowski on
Yes, I think so. Essentially you would be integrating over an open or
a half open interval. That, in itself, is not a, I think, problem
but what I do not like is that the answer for of the integral of a
generalised function over a finite interval is different from the
answer that you get when you multiply that function by the
characteristic function of the interval and integrate over the whole
real line.

Andrzej Kozlowski


On 8 Jun 2006, at 13:49, Chris Chiasson wrote:

> Andrzej,
>
> I had no idea it could be so convoluted!
>
> Just, let's say, for kicks... what if the treatment of Integrate was
> to always exclude the DiracDelta from the integral if it occurs on an
> endpoint? Do you think that would be as "consistent" as Maxim's
> approach?
>
> On 6/7/06, Andrzej Kozlowski <akoz(a)mimuw.edu.pl> wrote:
>> *This message was transferred with a trial version of CommuniGate
>> (tm) Pro*
>>
>> On 8 Jun 2006, at 07:02, Chris Chiasson wrote:
>>
>> >> I confess that I never noticed that Integrate and DiracDelta in
>> >> Mathematica behaved like this at end points. It seems to me
>> that the
>> >> Piecewise approach, which assumes that boundary points are treated
>> >> the same as interior points, is the more natural. But Chris
>> obviously
>> >> was not interested in the answer to this particular problem but in
>> >> more general matters. It is trivial to modify the behaviour of the
>> >> package in this respect (by adding ones own rules for handling
>> >> DiracDelta) to make it conform with what Mathematica does, if one
>> >> really wanted to. But my main point was that the package is
>> >> interesting in its own right and it seems to me that anyone
>> seriously
>> >> interested in this topic would have already taken a look at it.
>> Why,
>> >> even people not seriously interested in it, like myself, have
>> done so
>> >> and found interesting and instructive things in it.
>> >>
>> >> Andrzej
>> >
>> > I think Mathematica's Integrate does this to preserve the identity:
>> > Integrate[f[x],{x,a,c}]==Integrate[f[x],{x,a,b}]+Integrate[f[x],
>> > {x,b,c}]
>> >
>> > There is a danger of violating this when using PiecewiseIntegrate:
>> >
>> > In[1]:=
>> > <<PiecewiseIntegrate.m
>> > load[x_]=-9*10^3*DiracDelta[x]-
>> > Piecewise[{{x*10*(10^3/3),0\[LessEqual]x\[LessEqual]3}}]-6*10^3*
>> > DiracDelta[x-5]
>> > Integrate[load[x],{x,-10,10}]
>> > PiecewiseIntegrate[load[x],{x,-10,10}]
>> > {PiecewiseIntegrate[load[x],{x,-10,0}],PiecewiseIntegrate[load[x],
>> > {x,0,5}],
>> > PiecewiseIntegrate[load[x],{x,5,10}]}
>> > Plus@@%
>> > Out[2]=
>> > -6000*DiracDelta[-5 + x] - 9000*DiracDelta[x] -
>> > Piecewise[{{(10000*x)/3, 0 <= x <= 3}}]
>> > Out[3]=
>> > -30000
>> > Out[4]=
>> > -30000
>> > Out[5]=
>> > {-9000,-30000,-6000}
>> > Out[6]=
>> > -45000
>> > --
>> > http://chris.chiasson.name/
>>
>> Chris
>>
>> I realised this. However, I do not consider this identity correct in
>> this context. Mathematica often treats generalised functions as if
>> they were ordinary functions and this often lead to contradictions,
>> or at least unpleasant behaviour. Even if we for the time being
>> ignore the mathematical meaning of distributions you can get
>> inconsistent results such as this:
>>
>>
>> {Integrate[DiracDelta[x], {x, -1, 0}],
>> Integrate[DiracDelta[x], {x, -1, t}] /. t -> 0}
>>
>>
>> {1/2, 1}
>>
>> Compare this with:
>>
>> <<Piecewise`
>>
>>
>> {PiecewiseIntegrate[DiracDelta[x], {x, -1, 0}],
>> PiecewiseIntegrate[DiracDelta[x], {x, -1, t}] /. t -> 0}
>>
>>
>> {1,1}
>>
>> Or looking at it form another angle:
>>
>>
>> Limit[PiecewiseIntegrate[DiracDelta[x], {x, -1, t}],
>> t -> 0, Direction -> 1]
>>
>> 0
>>
>>
>> Limit[PiecewiseIntegrate[DiracDelta[x], {x, -1, t}],
>> t -> 0, Direction -> -1]
>>
>> 1
>>
>> So the Integral returned by Mathematica is not continuous either form
>> the left or from the right. The integral returned by
>> Piecewiseintegrate is continuous from the right, which is what is the
>> usual assumption in mathematical texts. But there is something even
>> worse about he Mathematica implementation.
>>
>> In fact, if you write out the formula for the sum of integrals using
>> limits you will see that it holds for PiecwiseIntegrate too.
>> In fact, generalised functions are not "functions" (they have no
>> values at points) but are usually defined as functionals on a certain
>> space of functions on real line (there is also another approach in
>> terms of non-standard analysis, but that is not implemented in
>> Mathematica). These functionals are defined in terms of integrals
>> over the entire real line so formally you cannot integrate the
>> DiracDelta over a finite interval; you can only integrate it from -
>> Infinity to +Infinity, because that is how the functional is defined.
>> Integrals over finite intervals can then be defined as integrals over
>> the whole real line of products of DiracDelta and the characteristic
>> functions of these intervals. But look what happens when you use
>> Mathematica:
>>
>>
>> {Integrate[DiracDelta[x]*Boole[0 <= x <= 2],
>> {x, -Infinity, Infinity}], Integrate[DiracDelta[x],
>> {x, 0, 2}]}
>>
>>
>> {1, 1/2}
>>
>>
>> But these ought to be the same by definition! Again compare this with
>> PiecewiseIntegrate
>>
>>
>> {PiecewiseIntegrate[DiracDelta[x]*Boole[0 <= x <= 2],
>> {x, -Infinity, Infinity}], PiecewiseIntegrate[DiracDelta[x],
>> {x, 0, 2}]}
>>
>>
>> {1,1}
>>
>>
>> From the mathematical point of view I have no doubt here: Maxim got
>> it right and Mathematica got it wrong. Of course one can always say
>> that these are only different conventions and as is usual with
>> various conventions, once you understand them and get used to them
>> you usually find that you can use them equally successfully. Still,
>> there are just too many departures form standard mathematics for me
>> to be comfortable with the way Mathematica behaves in the above
>> examples.
>>
>> Andrzej Kozlowski
>>
>

From: Andrzej Kozlowski on

On 8 Jun 2006, at 14:00, Chris Chiasson wrote:

> And on a related note, does anyone know why Mathematica handles
> DiracDelta'[x] in this way:
>
> In[1]:=
> D[UnitStep[x],{x,2}]
> Integrate[%,{x,-1,1}]
> Out[1]=
> Derivative[1][DiracDelta][x]
> Out[2]=
> 0

I can see nothing wrong with the above.
There is the following rule for the derivative of the DiracDelta:

Integrate[Derivative[n][DiracDelta][x]*f[x], {x, -Infinity,
Infinity}] == (-1)^n f[0]

for any suitable function f (a function of "slow growth").
Mathematica knows this for every positive n, e.g.

Mathematica knows this rule for any positive integer n:

Integrate[Derivative[5][DiracDelta][x]*f[x],
{x, -Infinity, Infinity}]

-Derivative[5][f][0]


Integrate[Derivative[6][DiracDelta][x]*f[x],
{x, -Infinity, Infinity}]


Derivative[6][f][0]

So taking f to be the function 1 we get, correctly

Integrate[Derivative[1][DiracDelta][x],
{x, -Infinity, Infinity}]

0

which is as it should be. But now, what is puzzling me is this:


Assuming[Element[n,Integers]&&n>0,
Integrate[Derivative[n][DiracDelta][x]*f[x],{x,-
Infinity,Infinity}]]

0

which is obviously wrong! This is with Mathematica 5.1. I wonder if
this is still so in 5.2.

Andrzej Kozlowski