Re: Nested numerical integration
- To: mathgroup at smc.vnet.net
 - Subject: [mg99287] Re: Nested numerical integration
 - From: antononcube at gmail.com
 - Date: Sat, 2 May 2009 05:56:31 -0400 (EDT)
 - References: <200904280845.EAA28624@smc.vnet.net> <gt98ok$oea$1@smc.vnet.net>
 
On Apr 29, 6:05 am, Leonid Shifrin <lsh... at gmail.com> wrote:
> Hi,
>
> direct 2D integration:
>
> In[1] = NIntegrate[w^2/(s - w), {s, 1, 5}, {w, -5, -1}]
>
> Out[1] = 25.8364
>
> Step-by-step integration:
>
> In[2] =
>
> Clear[int];
> int[w_?NumericQ] := NIntegrate[w^2/(s - w), {s, 1, 5}];
> NIntegrate[int[w], {w, -5, -1}]
>
> Out[2] = 25.8364
>
> The second method is more flexible since you may use it for
> non-rectangular domains.
This statement is not correct. Using the multi-dimentional NIntegrate
specfication gives more flexibility.
1. Multi-dimensional NIntegrate can be used non-rectangular domains.
In the example below the second variable has functional boundary:
In[2]:= NIntegrate[w^2/(s - w), {s, 1, 5}, {w, Sqrt[s], -1}]
Out[2]= -5.07779
You can use sampling points plot to see what the domain looks like:
Needs["Integration`NIntegrateUtilities`"]
NIntegrateSamplingPoints[NIntegrate[w^2/(s - w), {s, 1, 5}, {w, Sqrt
[s], -1}]]
2. Multi-dimensional NIntegrate can be used for integration over parts
of the integration region (or their exclusion).
In the example below a disk with center {3,-3} and radius 1 is
excluded from the integration:
In[12]:= NIntegrate[w^2/(s - w)*Boole[ (s - 3)^2 + (w + 3)^2 > 1], {s,
1, 5}, {w, -5, -1}]
Out[12]= 21.0579
Again you can see the integration domain with
NIntegrateSamplingPoints[
 NIntegrate[
  w^2/(s - w)*Boole[ (s - 3)^2 + (w + 3)^2 >= 1], {s, 1,
   5}, {w, -5, -1}]]
3. The examples above used a mutlti-dimensional integration rule. If
want to use one dimensional rule or, moreover, if you want to use
different one-dimensional rule in each dimension, you can specify this
with the Method option. This specification is closer to an integration
with nested NIntegrate's.
In[19]:= NIntegrate[w^2/(s - w), {s, 1, 5}, {w, -5, -1},
 Method -> {"GaussKronrodRule", "LobattoKronrodRule"}]
Out[19]= 25.8364
Here are the sampling points:
In[20]:= NIntegrateSamplingPoints[
 NIntegrate[w^2/(s - w), {s, 1, 5}, {w, -5, -1},
  Method -> {"GaussKronrodRule", "LobattoKronrodRule"}]]
Anton Antonov