Ejercicio: 2Eva2022PAOI_T1 Comparar integrales numéricos Simpson y Cuadratura de Gauss
Literal a. Integral con Simpson 1/3
Para la ecuación en el intervalo x entre [0,3] aplicando dos veces la fórmula en el intervalo se requieren al menos dos tramos cada Simpson de 1/3. Por lo que la cantidad de tramos es 4 (dos por cada formula, y dos fórmulas) que corresponden a 5 muestras.
El tamaño de paso se calcula como:
h = \frac{b-a}{tramos}=\frac{3-0}{4} = \frac{3}{4} = 0.75representados en una gráfica como

con lo que se define la función del integral f(x)
f(x) = \frac{e^x \sin(x)}{1+x^2}Con lo que aplicando la fórmula se puede obtener los valores de las muestras:
xi= [0. 0.75 1.5 2.25 3. ]
fi= [0. 0.9235 1.3755 1.2176 0.2834]
Nota: realizar las expresiones completas para las fórmulas si no adjunta el algoritmo en Python
Aplicando Simpson de 1/3 en cada tramo se tiene:
A_s= \frac{1}{3} \Big( \frac{3}{4} \Big ) \Big( 0 + 4(0.9235) + 1.3755 \Big) + + \frac{1}{3} \Big( \frac{3}{4} \Big ) \Big( 1.3755 + 4(1.2176) +0.2834 \Big) A_s = 2.8998Literal b. Integral con Cuadratura de Gauss
Para usar dos veces el método de Cuadratura de Gauss se usan dos intervalos, con lo que las muestras en x serán:
xj= [0. 1.5 3. ]
se calculan los valores para el tramo [0, 1.5]:
x_{a1} = \frac{0+1.5}{2} - \frac{1}{\sqrt{3}}\frac{1.5-0}{2} = 0.3169 x_{b1} = \frac{0+1.5}{2} + \frac{1}{\sqrt{3}}\frac{1.5-0}{2} = 1.1830 A_{g1} =\frac{1.5-0}{2} \Big( f(0.3169)+f(1.1830)\Big) = 1.2361se calculan los valores para el tramo [1.5, 3]:
x_{a2} = \frac{1.5+3}{2} - \frac{1}{\sqrt{3}}\frac{3-1.5}{2} = 1.8169 x_{b2} = \frac{1.5+3}{2} + \frac{1}{\sqrt{3}}\frac{3-1.5}{2} = 2.6830 A_{g2} =\frac{3-1.5}{2} \Big( f(1.8169)+f(2.6830)\Big) = 1.6329El total del integral para el intervalo [0,3]
A_g = A_{g1} + A_{g2} = 2.8691Al comparar los resultados entre los métodos del literal a y b
errado = |A_s - A_g| = 2.8998 - 2.8691 = 0.0307Instrucciones integradas en Python
# 2Eva_2022PAOI_T1
# Comparar integrales numéricos Simpson
# y Cuadratura de Gauss
import numpy as np
import matplotlib.pyplot as plt
# INGRESO
fx = lambda x: (np.exp(x)*np.sin(x))/(1+x**2)
a = 0
b = 3
# PROCEDIMIENTO
# Aplicando Simpson 1/3
tramos = 4
muestras = tramos+1
xi = np.linspace(a,b,muestras)
fi = fx(xi)
hs = xi[1]-xi[0]
As = (1/3)*(3/4)*(fi[0]+4*fi[1]+fi[2])
As = As + (1/3)*(3/4)*(fi[2]+4*fi[3]+fi[4])
erradoS = 2*(hs**5)
# Aplicando Cuadratura de Gauss
tramosG = 2
muestrasG = tramosG+1
xj = np.linspace(a,b,muestrasG)
hg = xj[1]-xj[0]
xa1 = (xj[0]+xj[1])/2 - (1/np.sqrt(3))*(xj[1]-xj[0])/2
xb1 = (xj[0]+xj[1])/2 + (1/np.sqrt(3))*(xj[1]-xj[0])/2
Ag1 = (hg/2)*(fx(xa1)+fx(xb1))
xa2 = (xj[1]+xj[2])/2 - (1/np.sqrt(3))*(xj[2]-xj[1])/2
xb2 = (xj[1]+xj[2])/2 + (1/np.sqrt(3))*(xj[2]-xj[1])/2
Ag2 = (hg/2)*(fx(xa2)+fx(xb2))
Ag = Ag1 + Ag2
# error entre métodos
errado = np.abs(As-Ag)
# SALIDA
print('xi=',xi)
print('fi=',fi)
print('A Simpson =', As)
print('error Truncamiento Simpson 2*(h^5):',
erradoS)
print('Cuadratura de Gauss xa,xb por tramos:',
[xa1,xb1,xa2,xb2])
print(' fx(xa),fx(xb) por tramos:',
[fx(xa1),fx(xb1),fx(xa2),fx(xb2)])
print(' integral de cada tramo:', [Ag1,Ag2])
print('A Gauss =', Ag)
print('errado entre Simpson y Gauss',errado)
# Grafica con mejor resolucion
xk = np.linspace(a,b,5*tramos+1)
fk = fx(xk)
plt.plot(xk,fk)
plt.plot(xi,fi,'o')
for unx in xi:
plt.axvline(unx,color='red',
linestyle='dotted')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('(np.exp(x)*np.sin(x))/(1+x**2)')
plt.grid()
plt.show()