Ejercicio: 2Eva2025PAOII_T1 Trayectoria avión de papel
Muestras de trayectoria.
tj = [0, 0.4 , 0.8 , 1.2 , 1.6 , 2 , 2.4 , 2.8 , 3.2 ]
xj = [0, 1.3142, 2.5572, 4.0112, 5.4723, 6.818, 8.1856, 9.6158, 11.0212]
fj = [2, 2.0130, 1.6521, 1.26 , 1.0931, 0.897, 0.5822, 0.3083, 0.0934 ]
Opción: Se cambian los índices de los datos de entrada para diferenciar de los ti,xi,fi usados en el algoritmo de Lagrange.
literal a. Planteamiento

Con 9 muestras es posible crear un polinomio de grado 8. Sin embargo si el grado del polinomio es grande, pueden aparecer oscilaciones como en el ejercicio Interpolar - Pato en pleno vuelo.
La trayectoria según la gráfica del enunciado no presenta grandes variaciones en el intervalo. Como punto de partida se selecciona un punto en cada extremo, luego los puntos necesarios adicionales para un polinomio seleccionado de grado menor a 8.
Para un polinomio de grado 3, con 4 muestras, se incluyen los extremos y dos puntos intermedios, por ejemplo:
xi = [0, 2.5572, 8.1856, 11.0212]
fi = [2, 1.6521, 0.5822, 0.0934 ]
Se considera opcional describir la trayectoria de cada componente respecto a tiempo: x vs t, y vs t. Revisar conceptos básicos de cinemática.
literal b.
Usando el método de Lagrange con los puntos seleccionados
L_0 = \frac{(x-2.5572)(x-8.1856)(x-11.0212)}{(0-2.5572)(0-8.1856)(0-11.0212)} L_1 = \frac{(x-0)(x-8.1856)(x-11.0212)}{(2.5572-0)(2.5572-8.1856)(2.5572-11.0212)} L_2 = \frac{(x-0)(x-2.5572)(x-11.0212)}{(8.1856-0)(8.1856-2.5572)(8.1856-11.0212)} L_3 = \frac{(x-0)(x-2.5572)(x-8.1856)}{(11.0212-0)(11.0212-2.5572)(11.0212-8.1856)} p(x) = 2 L_0 +1.6521 L_1 +0.5822 L_2 + 0.0934 L_3polinomio simplificado con el algoritmo, truncando a 4 dígitos cada coeficiente se obtiene:
p(x) = 0.0007888 x3 - 0.01507 x2 - 0.1026 x + 2.0
literal c. resultados con algoritmo
valores de fi: [2. 1.6521 0.5822 0.0934]
divisores en L[i]: [-230.69814251 121.82188208 -130.6412841 264.51451339]
Polinomio de Lagrange, expresiones
0.013561602987979*x*(x - 11.0212)*(x - 8.1856) +
0.000353099717678867*x*(x - 8.1856)*(x - 2.5572) +
-0.00866933724855683*(x - 11.0212)*(x - 8.1856)*(x - 2.5572) +
-0.00445647793516493*x*(x - 11.0212)*(x - 2.5572)
Polinomio de Lagrange:
0.000788887521936148*x**3 - 0.015076980044162*x**2 - 0.102651135756033*x + 2.0
3 2
0.000788887521936148⋅x - 0.015076980044162⋅x - 0.102651135756033⋅x + 2.0

otro ejemplo, tratando de incorporar el ángulo de lanzamiento se usa el punto cercano al punto inicial.

Con la gráfica se observa el error del polinomio con los puntos no considerados.
literal d.
El error de un punto se puede calcular como al diferencia entre el polinomio y la muestra en un punto no usado para generar el polinomio, por ejemplo usando índice 1 de la tabla:
>>> px(xj[1])-fj[1]
-0.1721532974199469
La cota sería el error mas grande, según lo desarrollado con el polinomio en cada caso. Queda como tarea revisar su propuesta de solución.
Algoritmo en Python
# 2Eva2025PAOII_T1 Trayectoria avión de papel
# polinomio de interpolación
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
# INGRESO
tj = [0, 0.4 , 0.8 , 1.2 , 1.6 , 2 , 2.4 , 2.8 , 3.2 ]
xj = [0, 1.3142, 2.5572, 4.0112, 5.4723, 6.818, 8.1856, 9.6158, 11.0212]
fj = [2, 2.0130, 1.6521, 1.26 , 1.0931, 0.897, 0.5822, 0.3083, 0.0934 ]
xi = [0, 2.5572, 8.1856, 11.0212]
fi = [2, 1.6521, 0.5822, 0.0934 ]
# PROCEDIMIENTO
# Vectores como arreglo, numeros reales
xi = np.array(xi,dtype=float)
fi = np.array(fi,dtype=float)
n = len(xi)
# Polinomio de Lagrange
x = sym.Symbol('x')
polinomio = 0*x # sym.S.Zero en Sympy
divisorL = np.zeros(n, dtype = float)
for i in range(0,n,1):
# Termino de Lagrange
numerador = 1
denominador = 1
for j in range(0,n,1):
if (j!=i):
numerador = numerador*(x-xi[j])
denominador = denominador*(xi[i]-xi[j])
terminoLi = numerador/denominador
polinomio = polinomio + terminoLi*fi[i]
divisorL[i] = denominador
polisimple = polinomio.expand() # simplifica los (x-xi)
px = sym.lambdify(x,polisimple) # evaluación numérica
# SALIDA
print(' valores de fi: ',fi)
print('divisores en L[i]: ',divisorL)
print()
print('Polinomio de Lagrange, expresiones')
#print(polinomio)
terminos = sym.Add.make_args(polinomio)
n_term = len(terminos)
for i in range(0,n_term,1):
if i<(n_term-1):
print(terminos[i],'+')
else:
print(terminos[i])
print()
print('Polinomio de Lagrange: ')
print(polisimple)
print()
sym.pprint(polisimple)
# Gráfica --------------
import matplotlib.pyplot as plt
muestras = 51 # resolución gráfica
a = np.min(xi) # intervalo [a,b]
b = np.max(xi)
xk = np.linspace(a,b,muestras)
yk = px(xk)
plt.plot(xj,fj,'o', label = '[xj,yj]')
plt.plot(xi,fi,'o', label = '[xi,yi]')
plt.plot(xk,yk, label = 'p(x)')
plt.legend()
plt.xlabel('xi')
plt.ylabel('yi')
plt.title('Interpolación Lagrange')
plt.grid()
plt.show()