trapezoidal
Computes the definite integral of a function using the trapezoidal rule.
You're viewing an older version of this page (#385). View the current version.
Interface
#include <codecogs/maths/calculus/quadrature/trapezoidal.h>
using namespace Maths::Calculus::Quadrature;
Overview
This module computes the area beneath either a user supplied function or a set of discrete points, using an approximation which assumes the function is linear between each two consecutive points.
Consider a two times differentiable function , two distinct abscissas
and a positive integer
. Then the following approximation holds:
with an error bound of:
This is a quadrature formula known as the trapezoidal rule. From the formula of the error bound you may notice that e.g. if one doubles the number of points , the approximation error is decreased four times. To better understand how this rule works, observe the following picture - the area between abscissas
and
is approximated by a trapezoid.

Below you will find examples that show how to use each version of the function and the error estimates in each case.
References
- Mihai Postolache - "Metode Numerice", Editura Sirius
- Mathworld, http://mathworld.wolfram.com/TrapezoidalRule.html
FUNCTION
trapezoidal
This version is to be used when you wish to pass the function to integrate as an argument, instead of passing an array with its values at distinct points.
Example 1
In what follows an approximation is found for the definite integral
and the absolute error from its actual value is estimated.
#include <codecogs/maths/calculus/quadrature/trapezoidal.h>
#include <stdio.h>
#include <math.h>
// number of points
#define N 100
// function to integrate
double f(double x)
{
return sin(x);
}
// the primitive of f, to estimate errors
double pf(double x)
{
return -cos(x);
}
int main()
{
// compute the approximate area
double fi = Maths::Calculus::Quadrature::trapezoidal(N, f, 1, 3),
// use the Leibniz-Newton formula to find a more precise estimate
realfi = pf(3) - pf(1);
// display problem data
printf(" f(x) = sin(x)\n");
printf(" points = %d\n\n", N);
// display the result and error estimate
printf(" I(1, 3) = %.15lf\n", fi);
printf("real value = %.15lf\n", realfi);
printf(" error = %.15lf\n\n", fabs(fi - realfi));
return 0;
}Output
f(x) = sin(x)
points = 100
I(1, 3) = 1.530243792301766
real value = 1.530294802468585
error = 0.000051010166819Parameters
Returns
FUNCTION
trapezoidal
This version is to be used when the function is not known analytically, but a table with its values at equally spaced abscissas is available.
Example 1
The code below gives an approximation for the definite integral
and estimates the absolute error from its actual value.
#include <codecogs/maths/calculus/quadrature/trapezoidal.h>
#include <stdio.h>
#include <math.h>
// the primitive of f, to estimate errors
double pf(double x)
{
return 2*sqrt(x*x*x)/3;
}
int main()
{
// values of the function at equally spaced abscissas
double ordinates[7] = {1, 1.0247, 1.04881, 1.07238,
1.09544, 1.11803, 1.14017},
// compute the approximate area
fi = Maths::Calculus::Quadrature::trapezoidal(7, ordinates, 1, 1.3),
// use the Leibniz-Newton formula to find a more precise estimate
realfi = pf(1.3) - pf(1);
// display problem data
printf(" f(x) = sqrt(x)\n");
printf(" points = 7\n\n");
// display the result and error estimate
printf(" I(1, 1.3) = %.15lf\n", fi);
printf("real value = %.15lf\n", realfi);
printf(" error = %.15lf\n\n", fabs(fi - realfi));
return 0;
}Output
f(x) = sqrt(x)
points = 7
I(1, 1.3) = 0.321472250000000
real value = 0.321485368419253
error = 0.000013118419253