Introducción a la interpolación unidimensional con Python

En este artículo estudiaremos la interpolación polinómica de Langrange, el fenómeno de Runge y la interpolación por Splines, utilizando las librerías Numpy, Scipy y matplotlib de Python.
¿Qué necesitamos?
  1. -Tener instalada una versión reciente de Python, yo utilizaré la versión 3.7. Además un editor de texto, en este caso utilizaré el Jupyter Notebook. Te recomiendo que descargues la suite Anaconda, que incluye las herramientas que utilizaremos y otras más para ciencia de datos.
  2. Los puedes descargar desde la página oficial de Anaconda:
¿Qué significa hacer una interpolación?
Básicamente consiste en que, dado un conjunto de puntos n+1 de la forma (x,f(x)), encontremos un polinomio de grado n como máximo, que pase por ellos. Entre los métodos más utilizados se encuentra la interpolación polinómica de Lagrange.
Sean x0, x1,…, xn números reales distintos. Entonces dados y0, y1,…, yn existe un único polinomio Pn(x) de grado menor o igual que n verificando que Pn(xi) = yi , i = 0, 1, . . . , n
Dicho polinomio viene dado por:



Donde:



para i = 0, 1,…, n.
Abrimos un notebook de Jupyter e importamos la interpolación de Langrange del módulo de interpolación de Scipy, tambíen la librería Matplotlib y Numpy con un alias.



Guardamos los valores de x y f(x) a usar, en vectores. Puedes usar tus propios datos:



Graficamos los valores a interpolar:



Obtendremos el polinomio de Lagrange para los puntos dados:



Evaluaremos el polinomio obtenido, en un intervalo de [0,6]:



Graficamos el polinomio obtenido, así como los puntos usados:



Si queremos obtener valores de f(x), lo único que necesitamos hacer es evaluar el polinomio en el punto x, por ejemplo, para hallar f(x) cuando x=1.8



¿Qué pasa si el número de nodos N es grande?
En interpolación numérica con polinomios de alto grado con nodos equidistantes, a menos que los puntos hayan sido elegidos cuidadosamente,se presenta el fenómeno de Runge. Nuestro polinomio oscilará como se ejemplifica a continuación:
Consideremos la siguiente función:



En un nuevo notebook de Jupyter importamos la función de interpolación bericéntrica, del módulo de interpolación de Scipy, también importamos Matplotlib y Numpy:



Aplicaremos la interpolación baricéntrica para la función dada:



Graficamos los polinomios obtenidos:



¿Qué solucion podemos aplicar para interpolar con muchos nodos, y evitar el fenómeno de Runge?
La respuesta a esta interrogante nos lleva al último punto de nuestro artículo:
Los splines son curvas polinómicas definidas a trozos,el trazador más común es el cúbico (de grado 3). Así obtendremos polinomios que pasan por los puntos dados, y evitamos tener un polinomio de grado alto.
En un notebook de Jupyter, importamos la función InterpolatedUnivariateSpline del módulo interpolate de Scipy, también Matplotlib y Numpy



Guardamos en arreglos los puntos (x,y) a interpolar:



Hacemos la interpolación correspondiente, el valor de es el grado del polinomio deseado, en este caso usaremos k=3:



Graficamos el polinomio obtenido:



Esto ha sido todo por esta ocasión, en artículos posteriores continuaremos con ajuste curvas. Y otros temas de Python aplicado a las ciencias e ingenierías.

Comentarios

Entradas populares