3.9 KiB
title | localeTitle |
---|---|
Simpson's Rule | Regla de simpson |
Regla de simpson
En el análisis numérico, la regla de Simpson es un método para la integración numérica (aproximación numérica de integrales definidas) .
La regla de Simpson se aproxima a la integración de la forma,
dónde,
f(x)
se llama integranda
= límite inferior de integraciónb
= límite superior de integración
Regla 1/3 de Simpson
Como se muestra en el diagrama anterior, el integrando f(x)
se aproxima mediante un polinomio de segundo orden; siendo el interpolante cuadrático P(x)
.
La aproximación sigue,
Reemplazando (ba)/2
como h
, obtenemos,
Como puede ver, hay un factor de 1/3
en la expresión anterior. Por eso, se llama la regla 1/3 de Simpson .
Si una función es altamente oscilatoria o carece de derivados en ciertos puntos, entonces la regla anterior puede no producir resultados precisos. Una forma común de manejar este problema es dividiendo el intervalo [a,b]
en varios subintervalos pequeños. La regla de Simpson se aplica a cada subintervalo, y los resultados se suman para producir una aproximación de la integral en todo el intervalo. Este tipo de enfoque se denomina la regla de Simpson compuesta .
Supongamos que el intervalo [a,b]
se divide en n
subintervalos, siendo n
un número par. Entonces, la regla compuesta de Simpson está dada por,
donde x j = a + jh para j = 0,1,…, n-1, n con h = (ba) / n ; en particular, x 0 = a y x n = b .
Ejemplo:
Aproxime el valor de la integral dada a continuación, tomando n = 8.
La implementación de la regla 1/3 de Simpson en C ++ es la siguiente:
#include<iostream>
#include<cmath>
using namespace std;
float f(float x)
{
return x*sin(x); //Define the function f(x)
}
float simpson(float a, float b, int n)
{
float h, x[n+1], sum = 0;
int j;
h = (ba)/n;
x[0] = a;
for(j=1; j<=n; j++)
{
x[j] = a + h*j;
}
for(j=1; j<=n/2; j++)
{
sum += f(x[2*j - 2]) + 4*f(x[2*j - 1]) + f(x[2*j]);
}
return sum*h/3;
}
int main()
{
float a,b,n;
a = 1; //Enter lower limit a
b = 4; //Enter upper limit b
n = 8; //Enter step-length n
if (n%2 == 0)
cout<<simpson(a,b,n)<<endl;
else
cout<<"n should be an even number";
return 0;
}
Regla 3/8 de Simpson
La regla de 3/8 de Simpson es similar a la regla de 1/3 de Simpson. La única diferencia es que, aquí, el interpolante es un polinomio cúbico. La regla 3/8 es aproximadamente el doble de precisa que la regla 1/3, pero utiliza un valor de función más.
La regla 3/8 de Simpson dice:
Reemplazando (ba)/3
como h
, obtenemos,
La regla 3/8 de Simpson para n intervalos (n debe ser un múltiplo de 3):
donde x j = a + jh para j = 0,1,…, n-1, n con h = (ba) / n ; en particular, x 0 = a y x n = b .