To achieve a definite integration of functions on suitable domains, we have mainly two methods—**Numerical integration** and
**Symbolic **
**integration**.

Numerical integration refers to the approximation of a definite integral by a quadrature process. Depending on how the function *f(x)* is given, the domain of integration, the knowledge of its singularities, and the choice of quadrature, we have different ways to attack this problem:

For univariate polynomials, exact integration is achieved algebraically on each finite interval

For functions given as a finite set of samples over their domain:

The composite trapezoidal rule

Simpson's trapezoidal rules

Romberg integration scheme

For generic univariate functions given as Python functions, on finite intervals:

Fixed-order Gaussian quadrature

Fixed-tolerance Gaussian quadrature

Simple non-adaptive quadrature, by applying 21-, 43- and 87-point Gauss-Kronron rules

Simple adaptive quadrature, by subdivision and quadrature on each subinterval

A blind global...