Ejercicio: 1Eva_2024PAOII_T2 Interpolar x(t) en caída de cofia para t entre[1,2]
De la tabla del ejercicio, solo se toman las dos primeras filas ti,xi
ti | 1 | 1.2 | 1.4 | 1.8 | 2 |
xi | -80.0108 | -45.9965 | 3.1946 | 69.5413 | 61.1849 |
yi | -8.3002 | -22.6765 | -20.9677 | 15.8771 | 33.8999 |
zi | 113.8356 | 112.2475 | 110.5523 | 106.7938 | 104.71 |
literal a. Planteamiento
En el planteamiento del problema para un polinomio de grado 3 indicado en el enunciado, se requieren al menos 4 puntos (grado=puntos-1). Al requerir cubrir todo el intervalo, los puntos en los extremos son obligatorios, quedando solo dos puntos por seleccionar, que se sugiere usar alrededor de 1.63 que es el valor buscado. quedando de ésta forma la selección de los puntos:
xi = [1. , 1.4, 1.8, 2. ] fi = [-80.0108, 3.1946, 69.5413, 61.1849]
En el parcial, se revisaron dos métodos: polinomio de interpolación con sistema de ecuaciones en la Unidad 3, y el conceptual con diferencias divididas de Newton. Por la extensión del desarrollo se realiza con diferencias divididas de Newton, que por facilidad de espacios se muestra en dos tablas, la de operaciones y resultados.
Tabla de operaciones:
i | ti | f[ti] | Primero | Segundo | Tercero |
---|---|---|---|---|---|
0 | 1 | -80.0108 | \frac{3.1946-(-80.0108)}{1.4-1} | \frac{165.8667-208.0135}{1.8-1} | \frac{-346.0812-52.6834}{2-1} |
1 | 1.4 | 3.1946 | \frac{69.5413-3.1946}{1.8-1.4} | \frac{-41.782-165.8667}{2-1.4} | |
2 | 1.8 | 69.5413 | \frac{61.1849-69.5413}{2-1.8} | ||
3 | 2 | 61.1849 |
Tabla de resultados
i | ti | f[ti] | Primero | Segundo | Tercero |
---|---|---|---|---|---|
0 | 1 | -80.0108 | 208.0135 | -52.6834 | -293.3978 |
1 | 1.4 | 3.1946 | 165.8667 | -346.0812 | |
2 | 1.8 | 69.5413 | -41.782 | ||
3 | 2 | 61.1849 |
Se construye el polinomio con los datos de la primera fila:
p(t) = -80.0108 +208.0135 (t - 1) - 52.6834(t - 1)(t - 1.4) -293.3978(t - 1)(t - 1.4)(t - 1.8)literal b. verificar polinomio
Se puede verificar de dos formas: probando los puntos o con la gráfica del algoritmo. La forma de escritura del polinomio hace cero algunos términos.
p(1.4) = -80.0108+208.0135 ((1.4) - 1) - 52.6834((1.4) - 1)((1.4) - 1.4) -293.3978((1.4) - 1)((1.4) - 1.4)((1.4) - 1.8) = 3.1846 p(1.8) = -80.0108+208.0135 ((1.8) - 1) - 52.6834((1.8) - 1)(t - 1.4) -293.3978((1.8) - 1)((1.8) - 1.4)((1.8) - 1.8) =69.5413La gráfica del algoritmo muestra que el polinomio pasa por todos los puntos.
literal c. error en polinomio
El punto de la tabla que no se usó es t = 1.2, que al evaluar en el polinomio se obtiene:
p(1.2) = -80.0108+ 208.0135 ((1.2) - 1) - 52.6834((1.2) - 1)((1.2) - 1.4) -293.3978((1.2) - 1)((1.2) - 1.4)((1.2) - 1.8) = -43.3423 errado = |-43.3423 -(-45.9965)| = 2.65literal d. conclusiones y recomendaciones
Para el error P(1.2). dado el orden de magnitud en el intervalo podría considerarse «bajo» e imperceptible al incorporarlo en la gráfica.
literal e. error en otro punto
El polinomio evaluado en t=1.65
p(1.65) = -80.0108 + 208.0135 ((1.65) - 1) - 52.6834((1.65) - 1)((1.65) - 1.4) -293.3978((1.65) - 1)((1.65) - 1.4)((1.65) - 1.8) = 53.7884la fórmula para x(t) del tema 1
x(t) = 15.35 - 13.42 t+100e^{-0.12t} cos(2\pi (0.5) t + \pi / 8) x(1.65) = 15.35 - 13.42(1.65)+100e^{-0.12(1.65)} cos(2\pi (0.5) (1.65) + \pi / 8) = 55.5884 errado = |55.5884 -53.7884| = 1.79resultados del algoritmo
Tabla Diferencia Dividida [['i ', 'xi ', 'fi ', 'F[1]', 'F[2]', 'F[3]', 'F[4]']] [[ 0. 1. -80.0108 208.0135 -52.6834 -293.3978 0. ] [ 1. 1.4 3.1946 165.8667 -346.0812 0. 0. ] [ 2. 1.8 69.5413 -41.782 0. 0. 0. ] [ 3. 2. 61.1849 0. 0. 0. 0. ]] dDividida: [ 208.0135 -52.6834 -293.3978 0. ] polinomio: 208.0135*t - 293.3978125*(t - 1.8)*(t - 1.4)*(t - 1.0) - 52.6834375000001*(t - 1.4)*(t - 1.0) - 288.0243 polinomio simplificado: -293.3978125*t**3 + 1179.587375*t**2 - 1343.7817375*t + 377.581375 >>> polinomio.subs(t,1.65) 53.7884880859375 >>> 15.35 - 13.42*(1.65)+100*np.exp(-0.12*(1.65))*np.cos(2*np.pi*(0.5)*(1.65) + np.pi/8) 55.588413032442766 >>> 55.5884 -53.7884 1.7999999999999972 >>>
las gráficas se muestran en los literales anteriores
# 1Eva_2024PAOII_T2 Interpolar x(t) en caída de cofia para t entre[1,2] # Polinomio interpolación # Diferencias Divididas de Newton import numpy as np import sympy as sym import matplotlib.pyplot as plt # INGRESO , Datos de prueba xi = [1. , 1.4, 1.8, 2. ] fi = [-80.0108, 3.1946, 69.5413, 61.1849] ##ti = [1. , 1.2, 1.4, 1.8, 2. ] ##xi = [-80.0108, -45.9965, 3.1946, 69.5413, 61.1849] ##yi = [ -8.3002, -22.6765, -20.9677, 15.8771, 33.8999] ##zi = [113.8356, 112.2475, 110.5523, 106.7938, 104.71 ] # PROCEDIMIENTO xi = np.array(xi,dtype=float) fi = np.array(fi,dtype=float) # Tabla de Diferencias Divididas titulo = ['i ','xi ','fi '] n = len(xi) ki = np.arange(0,n,1) tabla = np.concatenate(([ki],[xi],[fi]),axis=0) tabla = np.transpose(tabla) # diferencias divididas vacia dfinita = np.zeros(shape=(n,n),dtype=float) tabla = np.concatenate((tabla,dfinita), axis=1) # Calcula tabla, inicia en columna 3 [n,m] = np.shape(tabla) diagonal = n-1 j = 3 while (j < m): # Añade título para cada columna titulo.append('F['+str(j-2)+']') # cada fila de columna i = 0 paso = j-2 # inicia en 1 while (i < diagonal): denominador = (xi[i+paso]-xi[i]) numerador = tabla[i+1,j-1]-tabla[i,j-1] tabla[i,j] = numerador/denominador i = i+1 diagonal = diagonal - 1 j = j+1 # POLINOMIO con diferencias Divididas # caso: puntos equidistantes en eje x dDividida = tabla[0,3:] n = len(dfinita) # expresión del polinomio con Sympy t = sym.Symbol('t') polinomio = fi[0] for j in range(1,n,1): factor = dDividida[j-1] termino = 1 for k in range(0,j,1): termino = termino*(t-xi[k]) polinomio = polinomio + termino*factor # simplifica multiplicando entre (t-xi) polisimple = polinomio.expand() # polinomio para evaluacion numérica px = sym.lambdify(t,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 np.set_printoptions(precision = 4) print('Tabla Diferencia Dividida') print([titulo]) print(tabla) print('dDividida: ') print(dDividida) print('polinomio: ') print(polinomio) print('polinomio simplificado: ' ) print(polisimple) # Gráfica plt.plot(xi,fi,'o', label = 'Puntos') plt.plot(pxi,pfi, label = 'Polinomio') plt.xlabel('ti') plt.ylabel('xi') plt.grid() plt.title('Polinomio de interpolación') plt.plot(1.65,polinomio.subs(t,1.65), 'o',color='red',label='p(1.65)') plt.plot(1.2,polinomio.subs(t,1.2), 'o',color='green',label='p(1.2)') plt.legend() plt.show()