Ejercicio: 3Eva_2024PAOII_T2 Interpolar trayectoria helicóptero
xi = [0. , 2.50, 3.75, 5.00, 6.25, 7.5 ] yi = [3.7 , 3.25, 4.05, 4.33, 2.95, 3.22]
literal a
Según la gráfica presentada, los puntos a considerar para todo el intervalo, deberían ser al menos el primero y el último. Para un polinomio de grado 3 se requieren usar 4 muestras, por lo que faltarían dos muestras dentro del intervalo. Los puntos adicionales estarían entre los puntos intermedios, tratando de mantener una distancia equidistante entre ellos y tratar de mantener los cambios de dirección.
Los puntos seleccionados para el ejercicio serán
xi = [0. , 2.50, 5.00, 7.5 ] fi = [3.7 , 3.25, 4.33, 3.22]
Se puede construir el polinomio con los cualquiera de los métodos para interpolación dado que tienen tamaños de paso iguales entre tramos.
Desarrollando con el método de Lagrange, el polinomio se construye como:
término 1
término 2
término 3
término 4
se construye el polinomio usando la fórmula para fn(x) para cada valor fi,
simplificando con Sympy:
Polinomio de Lagrange, expresiones 0.104*x*(x - 7.5)*(x - 5.0) - 0.13856*x*(x - 7.5)*(x - 2.5) + 0.0343466666666667*x*(x - 5.0)*(x - 2.5) - 0.0394666666666667*(x - 7.5)*(x - 5.0)*(x - 2.5) Polinomio de Lagrange: -0.03968*x**3 + 0.42*x**2 - 0.982*x + 3.7
literal b
Para verificar que el polinomio pasa por los puntos, se puede usar una gráfica o al menos dos puntos usados para crear el polinomio:
>>> polisimple -0.03968*x**3 + 0.42*x**2 - 0.982*x + 3.7 >>> polisimple.subs(x,2.5) 3.25000000000000 >>> polisimple.subs(x,5) 4.33000000000000 >>>
Se comprueba que los valores obtenidos corresponden a las muestras, por lo que el polinomio cumple con los criterios básicos de interpolación. La gráfica permite verificar también el resultado.
literal c
Error en puntos no usados de las muestras
error = |3.83125 – 4.05| = 0.218
error = |4.28125 – 4.05| = 1.3312
literal d
Observando las gráficas de la trayectoria construida junto a las funciones descritas en el tema 1 se tiene que:
Un polinomio de grado 3 es insuficiente para describir la trayectoria, se debe aumentar el grado del polinomio para ajustar mejor la curva.
Por ejemplo, usando todos los puntos, la trayectoria y el polinomio son mas cercanas aunque no iguales.
literal e
Encontrar el error en P(5), como x=5 y es parte de los puntos de muestra, el error debería ser cero. Siempre y cuando x=5 sea parte de los puntos seleccionados.
error = | 4.33-4.33| = 0
literal f
Los resultados con el algoritmo de Lagrange se muestran como:
valores de fi: [3.7 3.25 4.33 3.22] divisores en L(i): [-93.75 31.25 -31.25 93.75] Polinomio de Lagrange, expresiones 0.104*x*(x - 7.5)*(x - 5.0) - 0.13856*x*(x - 7.5)*(x - 2.5) + 0.0343466666666667*x*(x - 5.0)*(x - 2.5) - 0.0394666666666667*(x - 7.5)*(x - 5.0)*(x - 2.5) Polinomio de Lagrange: -0.03968*x**3 + 0.42*x**2 - 0.982*x + 3.7
Algoritmo en Python
# 3Eva_2024PAOII_T2 Interpolar trayectoria helicóptero # Interpolacion de Lagrange # divisoresL solo para mostrar valores import numpy as np import sympy as sym import matplotlib.pyplot as plt # INGRESO , Datos de prueba # todos los datos xj = [0. , 2.50, 3.75, 5.00, 6.25, 7.5 ] fj = [3.7 , 3.25, 4.05, 4.33, 2.95, 3.22] # datos seleccionados xi = [0. , 2.50, 5.00, 7.5 ] fi = [3.7 , 3.25, 4.33, 3.22] # trayectoria gx = lambda t: 0.5*t +0 *t gy = lambda t: np.sin(0.10*t)*np.cos(0.7*t)+ 3.7 ta = 0 ; tb = 15 muestrast = 7 muestrasj = 4*muestrast # PROCEDIMIENTO # trayectoria tj = np.linspace(ta,tb,muestrasj) gxj = gx(tj) gyj = gy(tj) # Interpolación xi = np.array(xi,dtype=float) fi = np.array(fi,dtype=float) # Polinomio de Lagrange n = len(xi) x = sym.Symbol('x') polinomio = 0 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 # simplifica el polinomio polisimple = polinomio.expand() # para evaluación numérica px = sym.lambdify(x,polisimple) # Puntos para la gráfica muestras = 101 a = np.min(xi) b = np.max(xi) pxi = np.linspace(a,b,muestras) pfi = px(pxi) # SALIDA print(' valores de fi: ',fi) print('divisores en L(i): ',divisorL) print() print('Polinomio de Lagrange, expresiones') print(polinomio) print() print('Polinomio de Lagrange: ') print(polisimple) # Gráfica plt.plot(gxj,gyj,color='orange', label = 'trayectoria') plt.plot(xi,fi,'o', label = 'muestras') plt.plot(pxi,pfi,color='green',linestyle='dashed', label = 'P(x)') plt.legend() plt.xlabel('xi') plt.ylabel('fi') plt.grid() plt.title('Interpolación Lagrange') plt.show()