# Optimizing NIntegrate for higher PrecisionGoal

By default, NIntegrate works with MachinePrecision and its PrecisionGoal is set to Automatic which is effectively a value near 6:

In[1]:= Options[NIntegrate, {WorkingPrecision, PrecisionGoal}]

Out[1]= {WorkingPrecision -> MachinePrecision, PrecisionGoal -> Automatic}


I need sufficiently higher accuracy when computing the following integral:

dpdA[i_] := NIntegrate[
Cos[φ] Cos[i*φ] Exp[Sum[-Cos[j*φ], {j, 11}]], {φ, 0, Pi},
Method -> {Automatic, "SymbolicProcessing" -> None}]


The integral cannot be taken symbolically, so "SymbolicProcessing" is off. The problem is that when I increase PrecisionGoal to 15 and consequently WorkingPrecision to a value higher than MachinePrecision I get very low performance. Is it possible to compute this integral with at least 15 significant digits with high performance?

-
With NIntegrate, performance is usually dictated by the appropriateness or otherwise of the chosen method. Try, for example, dpdA[i_] := NIntegrate[Cos[φ] Cos[i*φ] Exp[Sum[-Cos[j*φ], {j, 11}]], {φ, 0, Pi}, WorkingPrecision -> $MachinePrecision, MinRecursion -> 3, MaxRecursion -> 5, Method -> {"GlobalAdaptive", Method -> {"GaussKronrodRule", "Points" -> 20}, "SymbolicProcessing" -> False}]. This works well for small arguments, but for larger arguments the integrand is highly oscillatory so another method could be better. – Oleksandr R. Jul 28 '12 at 0:24 @Oleksandr is right, a different method would be better. You say you don't want symbolic processing, so you can't use "LevinRule" as the Method (though it seems to work nicely on your integral when I tried it, and removing "SymbolicProcessing" -> None to that effect). I would suggest trying "ClenshawCurtisOscillatoryRule" as the Method. See if it helps. – Ｊ. Ｍ. Jul 28 '12 at 0:40 Maybe you can speed up the computation by transforming your integral with the substitution u==Cos[\[CurlyPhi]], \[CurlyPhi]==ArcCos[u], du/Sqrt[1-u^2]==d\[CurlyPhi]. With that transformation you get rid of all the costly trigonometric function calls so NIntegrate might give you shorter integration times. – Thies Heidecke Aug 10 '12 at 18:53 ok, i take back that suggestion. I just tested it, and it takes roughly double the integration time because the integrand has singularities at the ends. – Thies Heidecke Aug 10 '12 at 18:59 @Thies, in fact, when confronted with an integral with a$\sqrt{1-u^2}$factor over the interval$(-1,1)$to be evaluated numerically, the first instinct should be the substitution$u=\sin\,v$or$u=\cos\,v\$ to mitigate the endpoint singularities... –  Ｊ. Ｍ. Sep 7 '12 at 10:14