hola, he obtenido el polinomio de Hermite , mas la aproximación al valor de\( x \), mediante un código en python. el detalle es que no me muestra la gráfica. espero puedan ayudarme a corregir el fallo. anexo el código:
import numpy as np
from sympy import Symbol, lambdify, expand, pprint
import matplotlib.pyplot as plt
x = Symbol('x')
def diferencia(x , y , yp):
n = len(x)
z = np.empty(shape= 2 * n, dtype=float)
Q = np.zeros(shape=(2 * n, 2 * n), dtype=float)
d =np.empty(shape=2 * n, dtype=float)
for i in np.arange(n):
z[2 * i ] = x
z[2 * i + 1]= x
Q[2 * i][0] = y
Q[2 * i + 1][0] = y
Q[2 * i + 1][1] = yp
if i !=0:
Q[2 * i ][1] = (Q[2 * i ][0] - Q[2 * i - 1][0]) / (z[2 * i] - z[2 * i - 1])
for i in np.arange (2 , 2 * (n - 1) + 2):
for j in np.arange(2, i + 1 ):
f = Q[j-1] - Q[i - 1][j - 1]
g = z - z[i - j]
Q[j] = f / g
d = Q.diagonal()
return z, d
def polhermitesym(diff, z):
n = len(z) - 1
pol = diff[n]
for k in np.arange(1, n + 1):
pol = diff[n - k] + (x - z[n - k])*pol
return pol
if '_name_' "" '_maín_' :
datos_x = np.array([1, 1.05, 1.07], dtype=float)
datos_y = np.array([0.7657893864, 0.8354311093, 0.858930566], dtype=float )
datos_yp =[1.531578773, 1.242214551, 1.105631437]
d = diferencia(datos_x, datos_y, datos_yp)
diff = d[1]
polhermitesym = polhermitesym(diff, d[0])
pprint(' el polinomio interpolador de Hermite es : ')
pprint(expand(polhermitesym))
pprint(' el valor aproximado obtenido con x={0} es H({0})={1}'.format(1.03, polhermitesym.subs(x, 1.03)))
polisimple = polhermitesym.expand()
px = lambdify(x,polisimple)
muestras = 101
pxi = np.linspace(-2,5, muestras)
pfi = px(pxi)
plt.plot(datos_x, datos_y,'0', label = 'puntos')
plt.plot(pxi,pfi, label ='polinomio')
plt.legend()
plt.xlabel('xi')
plt.ylabel('fi')
plt.title('interpolacion de Hermite')