Ejercicio: 1Eva_IIT2007_T3 Interpolación inversa
f(0.50) = 1.648 f(0.65) = 1.915 f( x ) = 2.117 f(0.80) = 2.225 f(0.95) = 2.5857
Para el algoritmo se intercambian las variables previo a usarlo.
Luego se evalua en el punto buscado, en éste caso: fi=2.117, obteniendo que x es: 0.750321134121361
fi = np.array([0.50 , 0.65 , 0.80, 0.95 ]) x = np.array([1.648, 1.915, 2.225, 2.5857 ])
Polinomio de Lagrange 0.924124055152463*(-3.74531835205992*x + 7.17228464419475)*(x - 2.5857)*(x - 2.225) + 3.12624749298999*(x - 2.5857)*(x - 2.225)*(3.74531835205992*x - 6.17228464419475) - 7.15454716188057*(x - 2.5857)*(x - 1.915)*(1.73310225303293*x - 2.85615251299827) + 3.92689380344011*(x - 2.225)*(x - 1.915)*(1.06643915964594*x - 1.75749173509651) Expandiendo: 0.0358848473081501*x**3 - 0.342756582990887*x**2 + 1.44073214117566*x - 1.10404634485226 >>> px 0.0358848473081501*x**3 - 0.342756582990887*x**2 + 1.44073214117566*x - 1.10404634485226 >>> px.subs(x,2.117) 0.750321134121361
El algortmo modificado usado es:
# Interpolacion de Lagrange import numpy as np import matplotlib.pyplot as plt import sympy as sp # INGRESO , Datos de prueba fi = np.array([0.50 , 0.65 , 0.80, 0.95 ]) xi = np.array([1.648, 1.915, 2.225, 2.5857 ]) # PROCEDIMIENTO n = len(xi) x = sp.Symbol('x') # Polinomio polinomio = 0 for i in range(0,n,1): # Termino de Lagrange termino = 1 for j in range(0,n,1): if j!=i: termino = termino*(x-xi[j])/(xi[i]-xi[j]) polinomio = polinomio + termino*fi[i] # Expande el polinomio px = polinomio.expand() # Salida print('Polinomio de Lagrange') print(polinomio) print('Expandiendo: ') print(px)
para visualizar el resultado, intercambiando nuevamente los ejes:
>>> px 0.0358848473081501*x**3 - 0.342756582990887*x**2 + 1.44073214117566*x - 1.10404634485226 >>> px.subs(x,2.117) 0.750321134121361 >>> px 0.0358848473081501*x**3 - 0.342756582990887*x**2 + 1.44073214117566*x - 1.10404634485226
para revisar con la gráfica, se añaden las líneas,
# GRAFICA
polinomio = sp.lambdify(x,px)
y = np.linspace(1,3,100)
pyi= polinomio(y)
plt.plot(pyi,y)
plt.show()