Ejercicio: 2Eva_2022PAOI_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:
representados en una gráfica como
con lo que se define la función del integral f(x)
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:
Literal 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]:
se calculan los valores para el tramo [1.5, 3]:
El total del integral para el intervalo [0,3]
Al comparar los resultados entre los métodos del literal a y b
Instrucciones 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()