       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:=
>> 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=
>> 0.2592155970460264
>>
>> Out=
>> 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,
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.
"

Section 3.1.5 "Arbitrary-Precision Numbers" is worth reading .

HTH,
Jean-Marc

 "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