Re: NIntegrate preprocessing and rule selection
- To: mathgroup at smc.vnet.net
- Subject: [mg81488] Re: NIntegrate preprocessing and rule selection
- From: antononcube <antononcube at gmail.com>
- Date: Wed, 26 Sep 2007 06:31:01 -0400 (EDT)
- References: <fc85un$ll0$1@smc.vnet.net>
The specialized integrator for finite oscillatory integrals uses
modified Clenshaw-Curtis rule. When the integral is not oscillatory
enough the modified Clenshaw-Curtis rule switches to a Gauss-Kronrod
rule. Consider this an integral part of the modified Clenshaw-Curtis
rule (which is applied only to finite oscillatory integrals).
So if we want to use the non-modified Cleshaw-Curtis rule, we should
preclude the OscillatorySelection strategy. Here is one way to do
this:
In[8]:= f[w_, x_] = Sin[w*x]/(x2);
In[9]:= Reap[NIntegrate[f[1, x], {x, 1, 2},
Method -> {"SymbolicPreprocessing", "OscillatorySelection" -> False,
Method -> "ClenshawCurtisRule"}, EvaluationMonitor :> Sow[x]]]
Out[9]= {0.472399, {{1., 1.03806, 1.14645, 1.30866, 1.5, 1.69134,
1.85355, 1.96194,
2., 1.01903, 1.07322, 1.15433, 1.25, 1.34567, 1.42678, 1.48097,
1.98097,
1.92678, 1.84567, 1.75, 1.65433, 1.57322, 1.51903}}}
Compare with:
In[13]:= Reap[NIntegrate[x6, {x, 1, 2}, Method ->
"ClenshawCurtisRule",
EvaluationMonitor :> Sow[x]]]
Out[13]= {18.1429, {{1., 1.03806, 1.14645, 1.30866, 1.5, 1.69134,
1.85355, 1.96194, 2.,
1.01903, 1.07322, 1.15433, 1.25, 1.34567, 1.42678, 1.48097,
1.98097,
1.92678, 1.84567, 1.75, 1.65433, 1.57322, 1.51903}}}
Anton Antonov
Wolfram Research, Inc
On Sep 12, 2:53 am, "Andrew Moylan" <andrew.j.moy... at gmail.com> wrote:
> Here's an integrand that is highly oscillatory for large values of its first
> argument:
>
> f[w_, x_] = Sin[w*x]/(x^2);
>
> For small w,NIntegrateautomatically selects GaussKronrodRule as usual:
>
> Reap[NIntegrate[f[1, x], {x, 1, 2}, EvaluationMonitor :> Sow[x]]]
>
> For large w,NIntegrate'spreprocessor decides the integrand is highly
> oscillatory and uses its specialised Clenshaw-Curtis rule for oscillatory
> integrands:
>
> Reap[NIntegrate[f[10, x], {x, 1, 2}, EvaluationMonitor :> Sow[x]]]
>
> (One way to tell that the specialised rule was used is to notice that the
> endpoints (1. and 2.) were sampled.)
>
> Now consider this example:
>
> Reap[NIntegrate[f[1, x], {x, 1, 2}, Method -> "ClenshawCurtisRule",
> EvaluationMonitor :> Sow[x]]]
>
> As expected,NIntegrate'spreprocessor does not decide to use the
> specialised Clenshaw-Curtis rule (because w is too low to be called "highly
> oscillatory"). However, the integration then apparently proceeds using
> GaussKronrodRule rather than the requested ClenshawCurtisRule. Why is this?
>
> One way to get around this for particular cases where you know it is going
> to happen is to use the option "SymbolicProcessing"->0. But what should we
> do if we *do* want symbolic processing, but want ClenshawCurtisRule to be
> used (instead of GaussKronrodRule) in those cases to which none ofNIntegrate'sspecialised rules apply?