Regla de Simpson \(1/3\)#
Esta regla no ajusta la curva a integrar por medio de una recta sino por una interpolación polinomial de segundo orden.
![](https://www.freecodecamp.org/news/content/images/2020/02/sim01.jpg)
Como se muestra en el diagrama anterior, el integrando \(f(x)\) es aproximado por un polinomio de segundo orden, el interpolante cuadrático es \(P(x)\).
Sigue la aproximación para \(I\) ,
![](https://www.freecodecamp.org/news/content/images/2020/02/sim3.png)
Reemplazando \(\frac{(b-a)}{2}\) como \(h\) , obtenemos \(I\) como: ,
![](https://www.freecodecamp.org/news/content/images/2020/02/sim4.png)
Como puedes ver, hay un factor de \(\frac{1}{3}\) en la expresión anterior. Por eso, se llama la Regla de \(\frac{1}{3}\) de Simpson.
Error absoluto#
Algoritmo de regla simpson 1/3 para la integración#
Calcular \(I\)
Calcular el \(e_{absoluto}\)
Ejercicio:#
Integrar $\(\int_{a=1}^{b=2} x^2 dx \)$
utilizando la regla de simpson \(\frac{1}{3}\)
# Definimos las condiciones del problema
import sympy as sp
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
a = 1
b = 2
m = (a+b)/2
x = sp.symbols('x')
fx = x**2
fa = fx.subs({x:a})
fb = fx.subs({x:b})
fm = fx.subs({x:m})
print(f"f(a) = {fa} \nf(b) = {fb} \nf(m) = {fm:.2f}")
f(a) = 1
f(b) = 4
f(m) = 2.25
# Aplicamos la regla de simpson 1/3
I = (b-a) * ((fa + 4*fm + fb)/6)
print("I = ",I, "U^2")
I = 2.33333333333333 U^2
Tomemos el I real del anterior notebook:#
analiticamente:
# Ahora usemos la funcion de integracion simbólica de sympy
I_real = sp.integrate(fx,(x,a,b))
print("La integral por sympy es: ",I_real)
La integral por sympy es: 7/3
error = np.abs((I_real - I)/(I_real))*100
print(f"La integración tiene un error de {error:.2f}%")
La integración tiene un error de 0.00%
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
x = np.linspace(0,3, 100)
y = x**2
fig, ax = plt.subplots()
ax.plot(x,y,color='blue',label="$X^2$")
ax.grid()
## Plano cartesiano (Ejes)
ax.vlines(x=0,ymin=min(y),ymax=max(y),color='k')
ax.hlines(y=0,xmin=min(x),xmax=max(x),color='k')
## límites xl y xu
ax.vlines(x=a, ymin=0, ymax=fa, color='r', linestyle='--')
ax.vlines(x=b, ymin=0, ymax=fb, color='r', linestyle='--')
ax.fill([a,a,m,b,b],[0,fa,fm,fb,0], 'r', alpha=0.2)
plt.grid(True)
plt.legend()
# Mostrar gráfica
plt.show()
<Figure size 640x480 with 0 Axes>
![../../_images/203b5e586a0381dd72f44b886412d98180931d64b99b450d7636c66280753a20.png](../../_images/203b5e586a0381dd72f44b886412d98180931d64b99b450d7636c66280753a20.png)
🧑💻👩💻 Actividad#
Implemente un programa que permita dinámicante calcular la integral por regla de simpson 1/3 para cualquier función y que permita modificar los límites de la integral, pinte la gráfica y el resultado del área bajo la curva en la imágen además del error.
# Tu código va acá
# Tu código hasta acá
📘 Tarea#
Implemente la versión Multiple de simpson 1/3 muestre con el mismo ejemplo el error del método para diferentes valores de segmentos.
Investigue e implemente el método de simpson 3/8 tanto simple como múltiple y realice la prueba con la función abordada en clase.
# Tu código va acá
# Tu código hasta acá