Regla trapezoidal multiple#
Mejora la regla trapezoidal con el fin de partir el intervalo de integración en varios segmentos y aplicar la regla trapezoidal varias veces para dar mayor precisión.
Donde
\[
h = \frac{b - a}{n}
\]
\(h =\) ancho del segmento
\(n =\) número de segmentos deseados
\(a = x_0\)
\(b = x_n\)
Entonces la formula queda:
\[
I = \frac{h}{2} [f(x_0) + 2 ∑_{i=1}^{n-1} f(x_i) + f(x_n)]
\]
que se traduce en:
\[
I = (b-a) [\frac{f(x_0) + 2 ∑_{i=1}^{n-1} f(x_i) + f(x_n)}{2n}]
\]
Error absoluto#
\[
e_{absoluto} = |\frac{I_{real} - I_{aprox}}{I_{real}}|
\]
Ejercicio:#
Integrar $\(\int_{a=1}^{b=2} x^2 dx \)$
utilizando regla trapezoidal multiple con dos segmentos.
import sympy as sp
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
a = 1
b = 2
n = 2
x = sp.symbols('x')
fx = x**2
h = (b - a) / n
print (f"f(x)= {fx}, a = {a}, b = {b}, n = {n}, h = {h}")
f(x)= x**2, a = 1, b = 2, n = 2, h = 0.5
t = np.arange(a,b+h,h)
y = [float(round(fx.subs({x:ti}),3)) for ti in t]
print("xi = ",t)
print("f(xi)= ",y)
xi = [1. 1.5 2. ]
f(xi)= [1.0, 2.25, 4.0]
I = h/2 * (y[0] + 2 * (y[1]) + y[-1])
Tomemos el I real del anterior notebook:#
\[
\int^{x=2}_{x=1} x^2 dx
\]
analiticamente:
\[
\int^{2}_{1} x^2 dx = \frac{x^3}{3} |_1^2 = [\frac{2^3}{3} - \frac{1^3}{3}] = [\frac{8}{3} - \frac{1}{3}] = \frac{7}{3} = 2.333 U^2
\]
# 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 1.79%
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
t = np.linspace(0,3, 100)
y = t**2
fig, ax = plt.subplots()
ax.plot(t,y,color='blue',label="$X^2$")
ax.grid()
fa = fx.subs({x:a})
fb = fx.subs({x:b})
## Plano cartesiano (Ejes)
ax.vlines(x=0,ymin=min(y),ymax=max(y),color='k')
ax.hlines(y=0,xmin=min(t),xmax=max(t),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='--')
fa = fx.subs({x:a})
fb = fx.subs({x:a+h})
ax.vlines(x=a+h, ymin=0, ymax=fb, color='r', linestyle='--')
ax.fill([a,a,a+h,a+h],[0,fa,fb,0], 'r', alpha=0.2)
ax.plot([a,a+h],[fa,fb], color='r', linestyle='--')
fb = fx.subs({x:b})
ax.plot([a+h,b],[fx.subs({x:a+h}),fb], color='r', linestyle='--')
ax.fill([a+h,a+h,b,b],[0,fx.subs({x:a+h}),fb,0], 'b', alpha=0.2)
plt.grid(True)
plt.legend()
# Mostrar gráfica
plt.show()
<Figure size 640x480 with 0 Axes>
Actividad#
Complete el algoritmo y genere un programa que generalice y que permita aplicar el método visto para diferentes valores de a, b, segmentos de trapecios (n). muestre el error del cálculo al finalizar.
Resuelve:
Integrar $\(\int_{a=1}^{b=2} x^2 dx \)$
utilizando regla trapezoidal multiple con 3 segmentos.
# Tu código va acá
# Tu código hasta acá