Descarga la aplicación para disfrutar aún más
Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
# Polinomio interpolación # Diferencias Divididas de Newton # Tarea: Verificar tamaño de vectores, # verificar puntos equidistantes en x class interpolaciondeNewton(): import numpy as np import sympy as sym import matplotlib.pyplot as plt # INGRESO , Datos de prueba xcoordenadas = np.array([-1, -0.5, 0, 0.5,1]) funcioni = np.array([-0.04, 0.14, 1, 0.14,0.04]) # PROCEDIMIENTO # Tabla de Diferencias Divididas Avanzadas titulo = ['i ','xi ','fi '] niteraciones = len(xcoordenadas) ki = np.arange(0,niteraciones,1) tabla = np.concatenate(([ki],[xcoordenadas],[funcioni]),axis=0) tabla = np.transpose(tabla) # diferencias divididas vacia finita = np.zeros(shape=(niteraciones,niteraciones),dtype=float) tabla = np.concatenate((tabla,finita), 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 = (xcoordenadas[i+paso]-xcoordenadas[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 # Interpolación de newton # caso: puntos en eje x puntosDivididos = tabla[0,3:] n = len(finita) # expresión del polinomio con Sympy x = sym.Symbol('x') polinomio = funcioni[0] for j in range(1,n,1): factor = puntosDivididos[j-1] termino = 1 for k in range(0,j,1): termino = termino*(x-xcoordenadas[k]) polinomio = polinomio + termino*factor # simplifica multiplicando entre (x-xi) polinomiosimple = polinomio.expand() # polinomio para evaluacion numérica puntox = sym.lambdify(x,polinomiosimple) # Puntos para la gráfica muestras = 101 a = np.min(xcoordenadas) b = np.max(xcoordenadas) puntoxi = np.linspace(a,b,muestras) puntofi = puntox(puntoxi) # SALIDA np.set_printoptions(precision = 4) print('Tabla interpolación de newton') print([titulo]) print(tabla) print('Interpolación: ') print(puntosDivididos) print('polinomio: ') print(polinomio) print('polinomio simplificado: ' ) print(polinomiosimple) # Gráfica plt.plot(xcoordenadas,funcioni,'o', label = 'Puntos') plt.plot(puntoxi,puntofi, label = 'Polinomio') plt.legend() plt.xlabel('x coordenadas') plt.ylabel('funcion(i)') plt.title('Interpolación - Newton') plt.show()
Compartir