Numerical Integration

N[Integrate[expr,{x,xmin,xmax}]]try to perform an integral exactly, then find numerical approximations to the parts that remain
NIntegrate[expr,{x,xmin,xmax}]find a numerical approximation to an integral
NIntegrate[expr,{x,xmin,xmax},{y,ymin,ymax},]
multidimensional numerical integral
NIntegrate[expr,{x,xmin,x1,x2,,xmax}]
do a numerical integral along a line, starting at , going through the points , and ending at

Numerical integration functions.

This finds a numerical approximation to the integral .
In[1]:=
Click for copyable input
Out[1]=
Here is the numerical value of the double integral .
In[2]:=
Click for copyable input
Out[2]=

An important feature of NIntegrate is its ability to deal with functions that "blow up" at known points. NIntegrate automatically checks for such problems at the endpoints of the integration region.

The function blows up at , but NIntegrate still succeeds in getting the correct value for the integral.
In[3]:=
Click for copyable input
Out[3]=
The Wolfram Language can find the integral of exactly.
In[4]:=
Click for copyable input
Out[4]=
NIntegrate detects that the singularity in at is not integrable.
In[5]:=
Click for copyable input
Out[5]=

NIntegrate automatically looks for singularities at the endpoints of the integration region and any subregions defined by piecewise functions (such as Piecewise and Abs) in the integrand. If additional singularities are present, NIntegrate may not give you the right answer for the integral. Nevertheless, in following its adaptive procedure, NIntegrate will often detect the presence of potentially singular behavior, and will warn you about it.

NIntegrate warns you of a possible problem due to the singularity in the middle of the integration region. The final result is numerically quite close to the correct answer.
In[6]:=
Click for copyable input
Out[6]=

If you know that your integrand has singularities at particular points, you can explicitly tell NIntegrate to deal with them. NIntegrate[expr,{x,xmin,x1,x2,,xmax}] integrates expr from to , looking for possible singularities at each of the intermediate points .

This gives the same integral, but now explicitly deals with the singularity at .
In[7]:=
Click for copyable input
Out[7]=

You can also use the list of intermediate points in NIntegrate to specify an integration contour to follow in the complex plane. The contour is taken to consist of a sequence of line segments, starting at , going through each of the , and ending at .

This integrates around a closed contour in the complex plane, going from through the points , , and , then back to .
In[8]:=
Click for copyable input
Out[8]=
The integral gives , as expected from Cauchy's theorem.
In[9]:=
Click for copyable input
Out[9]=
option name
default value
MinRecursion0minimum number of recursions for the integration method
MaxRecursionAutomaticmaximum number of recursions for the integration method
MaxPointsAutomaticmaximum total number of times to sample the integrand

Special options for NIntegrate.

When NIntegrate tries to evaluate a numerical integral, it samples the integrand at a sequence of points. If it finds that the integrand changes rapidly in a particular region, then it recursively takes more sample points in that region. The parameters and MaxRecursion specify the minimum and maximum number of recursions to use. Increasing the value of guarantees that NIntegrate will use a larger number of sample points. and MaxRecursion limit the number of sample points which NIntegrate will ever try to use. Increasing or MaxRecursion will make NIntegrate work more slowly.

With the default settings for all options, NIntegrate misses the peak in near , and gives the wrong answer for the integral.
In[10]:=
Click for copyable input
Out[10]=
With the option , NIntegrate samples enough points that it notices the peak around . With the default setting of MaxRecursion, however, NIntegrate cannot use enough sample points to be able to expect an accurate answer.
In[11]:=
Click for copyable input
Out[11]=
With this setting of MaxRecursion, NIntegrate can get an accurate answer for the integral.
In[12]:=
Click for copyable input
Out[12]=
Another way to solve the problem is to make NIntegrate break the integration region into several pieces, with a small piece that explicitly covers the neighborhood of the peak.
In[13]:=
Click for copyable input
Out[13]=

For integrals in many dimensions, it can take a long time for NIntegrate to get a precise answer. However, by setting the option , you can tell NIntegrate to give you just a rough estimate, sampling the integrand only a limited number of times.

Here is a way to get a rough estimate for an integral that takes a long time to compute.
In[14]:=
Click for copyable input
Out[14]=