Ejercicio: 3Eva2026PAOI_T3 Área entre recorrido y eje x desplazado
literal a
El ejercicio se puede plantear a partir del polinomio obtenido en el tema anterior
También se puede plantear a partir del número de muestras de las funciones x(t), y(t)
Se presenta la opción primera, usando el resultado del polinomio que del desarrollo del anterior para el primer tramo es:
p_3(x) = 2.0 - 4.61880215351701 x + 3.46410161513775 x^2-0.577350269189626x^3
El eje x se desplaza 2 unidades hacia arriba, por lo que el polinomio resta 2 unidades:
f(x) = p(x) - 2 f(x) = - 4.6188 x + 3.4641 x^2 - 0.5773 x^3Como se dispone de la función a lo lago del eje x, se procede a usar el método de cuadratura de Gauss, completando al mismo tiempo el literal 3. También como la gráfica es simétrica se realizará solo para la mitad del intervalo, pues la otra mitad es la imagen.
Intervalo en x es de [2,4]
literal b
x_a = \frac{b+a}{2} - \frac{b-a}{2}\left(\frac{1}{\sqrt{3}} \right) x_a = \frac{4+2}{2} - \frac{4-2}{2}\left(\frac{1}{\sqrt{3}} \right) = 2.42265 x_b = \frac{b+a}{2} + \frac{b-a}{2}\left(\frac{1}{\sqrt{3}} \right) x_b = \frac{4+2}{2} + \frac{4-2}{2}\left(\frac{1}{\sqrt{3}} \right) = 3.57735donde se evalúa la función en xa y xb
f(2.42265) = - 4.6188 (2.42265) + 3.4641 (2.42265)^2-0.5773(2.42265) ^3 = 0.93248 f(3.57735) = - 4.6188 (3.57735) + 3.4641 (3.57735)^2-0.5773(3.57735)^3 =1.37692con lo que el valor aproximado del integral con 2 puntos es:
con lo que el resultado aproximado del integral se convierte en:
I \cong \frac{b-a}{2}(f(x_a) + f(x_b))con lo que el resultado aproximado del integral se convierte en:
I \cong \frac{4-2}{2}(0.93248 + 1.37692) = 2.3094El valor del integral es el mismo con signo negativo para el intervalo [0,2].
Lo que cumple con la separación por segmento positivo y negativo
literal c
La cota de error de truncamiento para el ejercicio usando la tabla es del orden de f(4)(x). Siendo la función un polinomio de grado 3, el error es casi cero al desaparecer los términos con la 3ra derivada.
Nota: observar el ejercicio si el grado del polinomio es mayor a 3.
literal d
Factores Gauss-Legendre puntos: 2
xgl: [-0.57735 0.57735]
cgl: [1.0, 1.0]
tabla por intervalos [a,b]
[a,b] : [2. 4.]
xi : [2.42265 3.57735]
fi : [0.93248 1.37692]
area : 2.309401076758377
Integral: 2.309401076758377

Algoritmo en Python
Usando como base el algoritmo de la unidad de integración para cuadratura de Gauss de dos puntos se presenta:
# Integración: Cuadratura de Gauss de 2 puntos
# modelo con varios tramos entre [a,b]
import numpy as np
# INGRESO
fx = lambda x: -4.61880215351701*x + 3.46410161513775*(x**2)-0.577350269189626*(x**3)
a = 2 # intervalo de integración
b = 4
tramos = 1 # subintervalos a integrar
precision = 5 # decimales en tabla
# PROCEDIMIENTO
# cuadratura de 2 puntos
n_puntos = 2
xgl = np.array([-1/np.sqrt(3), 1/np.sqrt(3)],dtype=float)
cgl = [1.,1.]
# cuadratura de n_puntos, fórmulas Gauss-Legendre
#xgl, cgl = np.polynomial.legendre.leggauss(2)
x_h = np.linspace(a,b,tramos+1)
tabla = {}
suma = 0
for k in range(0,tramos,1):
a = x_h[k]
b = x_h[k+1]
centro = (a+b)/2
mitad = (b-a)/2
xa = centro + xgl[0]*mitad
xb = centro + xgl[1]*mitad
area = ((b-a)/2)*(cgl[0]*fx(xa) + cgl[1]*fx(xb))
tabla[k]= {'[a,b]': np.array([a,b]),
'xi': np.array([xa,xb]),
'fi': np.array([fx(xa),fx(xb)]),
'area':area
}
suma = suma + area
# SALIDA
np.set_printoptions(precision)
print('Factores Gauss-Legendre puntos:',n_puntos)
print('xgl:',xgl)
print('cgl:',cgl)
print('tabla por intervalos [a,b]')
for k in range(0,tramos,1):
for entrada in tabla[k]:
print(entrada,':',tabla[k][entrada])
print('Integral: ', suma)
# GRAFICA -------------
# concepto con 'pocos' tramos/segmentos
import matplotlib.pyplot as plt
titulo = 'Cuadratura Gauss-Legendre puntos:'+str(n_puntos)
a = np.min(x_h); b = np.max(x_h)
muestras_k = tramos*10+1 # fx suave en grafico
xk = np.linspace(a,b,muestras_k)
fk = fx(xk)
# tramos marcas de división
for i in range(0,tramos+1,1):
plt.axvline(x_h[i],linestyle='dashed',
color='tab:gray')
for k in range(0,tramos,1):
xi = tabla[k]['xi']
fi = tabla[k]['fi']
for i in range(0,n_puntos,1):
plt.vlines(xi[i],0,fi[i],
linestyle='dotted',
color='gray')
plt.plot(xi[i],fi[i],'o',color='gray')
if n_puntos>2:
plt.fill_between(xk,0,fk,color='tab:olive')
if n_puntos==2: # recta trapecio
for k in range(0,tramos,1):
xi = tabla[k]['xi']
fi = tabla[k]['fi']
df = (fi[1]-fi[0])/(xi[1]-xi[0]) # pendiente
f0 = fi[0] + df*(x_h[k]-xi[0]) # en xi[i]
f1 = fi[0] + df*(x_h[k+1]-xi[0]) # en xi[i+1]
plt.fill_between([x_h[k],x_h[k+1]],
0,[f0,f1],
color='tab:olive')
plt.plot([x_h[k],x_h[k+1]],[f0,f1],
linestyle='dashed',color='orange')
# linea fx
plt.plot(xk,fk, label='f(x)', color = 'blue')
plt.title(titulo)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.tight_layout()
plt.show()
literal e
Realizado junto a los literales anteriores.
Queda de tarea realizar usando muestras usando el intervalo de tiempo y las expresiones con x(t), y(t)