MathGroup Archive 2006

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

Search the Archive

question about DiracDelta

  • To: mathgroup at smc.vnet.net
  • Subject: [mg69610] question about DiracDelta
  • From: dimmechan at yahoo.com
  • Date: Sun, 17 Sep 2006 06:58:02 -0400 (EDT)

Dear everyone,

Mathematica is able to integrate numerically functions with peaks.
E.g.


Clear["Global*"]

Plot[Exp[-x^2], {x, -10, 10}, PlotRange -> All]

Integrate[Exp[-x^2], {x, -1000, 1000}]
N[%]
NIntegrate[Exp[-x^2], {x, -1000, 1000}]
Sqrt[Pi]*Erf[1000]
1.7724538509055159
1.7724538509054621

With the default settings for all options, NIntegrate misses the peak
at x=0 here.

NIntegrate[Exp[-x^2], {x, -10000, 10000}]
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.
0.

However,

NIntegrate[Exp[-x^2], {x, -10000, 10000}, MinRecursion -> 6,
MaxRecursion -> 12]
NIntegrate[Exp[-x^2], {x, -10000, -10, 0, 10, 10000}]
1.7724538509054268
1.7724538509055054

My question is if, somehow, can NIntegrate treat functions with
"spikes" like DiracDelta?

Integrate[DiracDelta[x - 1], {x, -1, 3}]
Block[{Message},NIntegrate[DiracDelta[x - 1], {x, -1,1, 3}]]
Block[{Message},NIntegrate[DiracDelta[x - 1], {x, -1, 1, 3},
WorkingPrecision -> 50, MinRecursion -> 10, MaxRecursion -> 20]]
1
0.
0.

I know that I am asking essentially Mathematica to do a numerical
integral of a function that will be zero everywhere except x=1. So,
unless NIntegrate causes the function to be sampled at x=1, it will
evaluate to zero.

Anyway, here are the sampled points used by NIntegrate.

Block[{Message}, ListPlot[Reap[a1=NIntegrate[DiracDelta[x - 1], {x, -1,
1, 3}, EvaluationMonitor :> Sow[x]]][[2,1]]]]
Block[{Message}, ListPlot[a2=Reap[NIntegrate[DiracDelta[x - 1], {x, -1,
1, 3}, WorkingPrecision->50,MinRecursion -> 10, MaxRecursion -> 20,
EvaluationMonitor :> Sow[x]]][[2,1]]]]

Length[Select[a1, 0.95 < #1 < 1.05 & ]]
2
Length[Select[a2, 0.95 < #1 < 1.05 & ]]
1688

Thanks in advance for any help.

Dimitris Anagnostou


  • Prev by Date: Re: question about plot
  • Next by Date: RE: question about plot
  • Previous by thread: Re: Plotting with arbitary precision????
  • Next by thread: Re: question about DiracDelta