s1Eva_2024PAOII_T2 Interpolar x(t) en caída de cofia para t entre[1,2]

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.5413

La gráfica del algoritmo muestra que el polinomio pasa por todos los puntos.

Trayectoria Caida Interpola grafliteral 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.65

literal 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.7884

la 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.79

resultados 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()