MathGroup Archive 2007

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

Search the Archive

Re: Precision available with NIntegrate {Method -> Oscillatory}

  • To: mathgroup at smc.vnet.net
  • Subject: [mg74111] Re: Precision available with NIntegrate {Method -> Oscillatory}
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Sat, 10 Mar 2007 06:55:44 -0500 (EST)
  • Organization: The Open University, Milton Keynes, UK
  • References: <eslsev$q3h$1@smc.vnet.net><esol7r$eeh$1@smc.vnet.net> <esr0pf$6ir$1@smc.vnet.net>

Peter wrote:
> On Mar 8, 1:32 am, Jean-Marc Gulliet <jeanmarc.gull... at gmail.com>
> wrote:
>> Peter wrote:
>>> Hi.  I'm helping someone with a scientific programming problem, and I
>>> wanted to get a high accuracy result to use as a reference solution.
>>> I am able to get 15 digits of accuracy for a non-oscillatory integral,
>>> but it appears that when I specify the option Method -> Oscillatory
>>> for NIntegrate, it ignores my precision request:
>>> --------------------------------------------------------------------
>>> a = 0;
>>> b = 6706902 * 10^\(-7);
>>> c = 589300 * 10^(-6);
>>> d = 9802874 * 10^(-7);
>>> t = -5026548 * 10^(-6);
>>> =CE=B1 = 0;
>>> Iint = NIntegrate[(b^2 - 2 d Cos[t + x] b + d^2 + (a + b c
>>> x)^2)^(-3/2), {x, =CE=B1, Infinity}, {PrecisionGoal -> 15, WorkingPrecision
>>> -> 30, MaxRecursion -> 200}]
>>> NIntegrate::slwcon :
>>> Numerical integration converging too slowly; suspect one of the
>>> following: singularity, value of the integration being 0, oscillatory
>>> integrand, or insufficient WorkingPrecision. If your integrand is
>>> oscillatory try using the option Method->Oscillatory in NIntegrate.
>>> More...
>>> 1=2E46869038002327
>>> Cint = NIntegrate[Cos[x]/(b^2 - 2 d Cos[t + x] b + d^2 + (a + b c
>>> x)^2)^(3/2), {x, =CE=B1, Infinity}, {PrecisionGoal -> 15, WorkingPrecision -
>>>> 25, MaxRecursion -> 300, Method -> Oscillatory}]
>>> 0=2E2592156
>>> --------------------------------------------------------------------
>>> I'm not concerned about the slow convergence warning on the first
>>> integral, Iint.  Rather, the second integral, Cint, is only evaluated
>>> to a precision of 8 digits, despite the explicit request for more in
>>> the call to Nintegrate.  Does anyone have a suggestion to obtain 15
>>> digits of precision on the second integral?
>>> Thanks,
>>> Peter
>> Set the system variable $MinPrecision to 15.
>>
>> In[1]:=
>> a = 0;
>> b = 6706902/10^7;
>> c = 589300/10^6;
>> d = 9802874/10^7;
>> t = -5026548/10^6;
>>
>> Block[{$MinPrecision = 15},
>>    Cint = NIntegrate[Cos[x]/(b^2 - 2*d*Cos[t + x]*b +
>>         d^2 + (a + b*c*x)^2)^(3/2), {x, 0, Infinity},
>>      {PrecisionGoal -> 15, WorkingPrecision -> 30,
>>       MaxRecursion -> 300, Method -> Oscillatory}]]
>>
>> Precision[Cint]
>>
>> Out[6]=
>> 0.2592155970460264
>>
>> Out[7]=
>> 15.988
>>
>> Regards,
>> Jean-Marc
> 
> Thank-you, Jean-Marc.  It worked.  Could you please explain why it is
> necessary?  I thought that the options I passed to NIntegrate were
> sufficient.
> 
> Thanks,
> Peter
> 
> 
Hi Peter,

Options such as PrecisionGoal as a wish. That is, NIntegrate will try to 
return a result with the desired precision. This is not guarantee, 
however. From the online help, "Even though you may specify 
PrecisionGoal -> n, the results you get may sometimes have much less 
than nâ??digit precision."

OTOH, $MinPrecision is a system-wide variable. Setting it to a specific 
value coerces Mathematica to work at least at given level of precision:
"By making the global assignment $MinPrecision = n, you can effectively 
apply SetPrecision[expr, n] at every step in a computation. This means 
that even when the number of correct digits in an arbitraryâ??precision 
number drops below n, the number will always be padded to have n digits. 
[1]"

Section 3.1.5 "Arbitrary-Precision Numbers" is worth reading [1].

HTH,
Jean-Marc

[1] "The Mathematica Book Online / Advanced Mathematics in Mathematica / 
Numbers / 3.1.5 Arbitrary-Precision Numbers", 
http://documents.wolfram.com/mathematica/book/section-3.1.5


  • Prev by Date: Re: poor efficiency of Numerical Integration at 5.2.0 ?
  • Next by Date: Matching two patterns?
  • Previous by thread: Re: Precision available with NIntegrate {Method -> Oscillatory}
  • Next by thread: Efficient repeated use of FindRoot