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