Skip to Content

Integración por la fórmula de Simpson

Vamos a calcular el valor de una integral definida

abf(x)dx\int_a ^ b f (x) dx

La solución descrita aquí se publicó en una de las disertaciones de Thomas Simpson en 1743.

Fórmula de Simpson

Sea nn algún número natural. Dividimos el segmento de integración [a,b][a, b] en 2n2n partes iguales:

xi=a+ih,  i=02n,x_i = a + i h, ~~ i = 0 \ldots 2n,

h=ba2n.h = \frac {b-a} {2n}.

Ahora calculamos la integral por separado en cada uno de los segmentos [x2i2,x2i][x_ {2i-2}, x_ {2i}], i=1ni = 1 \ldots n, y luego sumamos todos los valores.

Así, supongamos que consideramos el siguiente segmento [x2i2,x2i],i=1n[x_ {2i-2}, x_ {2i}], i = 1 \ldots n. Reemplazamos la función f(x)f(x) en él por una parábola P(x)P(x) que pasa por 3 puntos (x2i2,x2i1,x2i)(x_ {2i-2}, x_ {2i-1}, x_ {2i}). Tal parábola siempre existe y es única; se puede hallar analíticamente. Por ejemplo podríamos construirla usando la interpolación polinómica de Lagrange. Lo único que queda por hacer es integrar este polinomio. Si se hace esto para una función general ff, se recibe una expresión notablemente simple:

x2i2x2if(x) dxx2i2x2iP(x) dx=(f(x2i2)+4f(x2i1)+(f(x2i))h3\int_{x_ {2i-2}} ^ {x_ {2i}} f (x) ~dx \approx \int_{x_ {2i-2}} ^ {x_ {2i}} P (x) ~dx = \left(f(x_{2i-2}) + 4f(x_{2i-1})+(f(x_{2i})\right)\frac {h} {3}

Sumando estos valores sobre todos los segmentos, obtenemos la fórmula de Simpson final:

abf(x)dx(f(x0)+4f(x1)+2f(x2)+4f(x3)+2f(x4)++4f(x2N1)+f(x2N))h3\int_a ^ b f (x) dx \approx \left(f (x_0) + 4 f (x_1) + 2 f (x_2) + 4f(x_3) + 2 f(x_4) + \ldots + 4 f(x_{2N-1}) + f(x_{2N}) \right)\frac {h} {3}

Error

El error al aproximar una integral por la fórmula de Simpson es

190(ba2)5f(4)(ξ) -\tfrac{1}{90} \left(\tfrac{b-a}{2}\right)^5 f^{(4)}(\xi)

donde ξ\xi es algún número entre aa y bb.

El error es asintóticamente proporcional a (ba)5(b-a)^5. Sin embargo, las derivaciones de arriba sugieren un error proporcional a (ba)4(b-a)^4. La regla de Simpson gana un orden extra porque los puntos en los que se evalúa el integrando están distribuidos simétricamente en el intervalo [a,b][a, b].

Implementación

Aquí, f(x)f(x) es alguna función definida por el usuario.

const int N = 1000 * 1000; // number of steps (already multiplied by 2) double simpson_integration(double a, double b){ double h = (b - a) / N; double s = f(a) + f(b); // a = x_0 and b = x_2n for (int i = 1; i <= N - 1; ++i) { // Refer to final Simpson's formula double x = a + h * i; s += f(x) * ((i & 1) ? 4 : 2); } s *= h / 3; return s; }

Problemas de práctica