np.polyfit () – Ajuste de curva con Polyfit NumPy

El .función polyfit(), acepta tres valores de entrada diferentes: x, y y el grado polinómico. Los argumentos x y y corresponden a los valores de los puntos de datos que queremos encajar, en los ejes x y y, respectivamente. El tercer parámetro especifica el grado de nuestra función polinómica. Por ejemplo, para obtener un ajuste lineal, utilice el grado 1.

Tabla de Contenidos

¿Qué es el ajuste de curvas?

El ajuste de curvas consiste en construir una función matemática que puede ajustarse a algunos puntos de datos específicos. La mayoría de las veces, la ecuación de ajuste está sujeta a restricciones; además, también es posible hacer una conjetura inicial para proporcionar puntos de partida útiles para la estimación de los parámetros de ajuste, este último procedimiento tiene la ventaja de reducir el trabajo computacional. En este artículo exploraremos la función NumPy .polyfit(), que permite crear funciones de ajuste polinómico de una manera muy simple e inmediata.

Ajuste lineal

El tipo de ajuste más simple es el ajuste lineal (una función polinómica de primer grado), en el que los puntos de datos se ajustan utilizando una línea recta. La ecuación general de una línea recta es:

y = mx + q

Donde » m «se llama coeficiente angular e intercepción» q». Cuando aplicamos un ajuste lineal, básicamente estamos buscando los valores de los parámetros » m » y » q » que producen el mejor ajuste para nuestros puntos de datos. En Numpy, la función np.polyfit() es una herramienta muy intuitiva y potente para ajustar puntos de datos; veamos cómo ajustar una serie aleatoria de puntos de datos con una línea recta.

En el siguiente ejemplo, queremos aplicar un ajuste lineal a algunos puntos de datos, descritos por los arrays x y y. El .función polyfit(), acepta tres valores de entrada diferentes: x, y y el grado polinómico. Mientras que x y y corresponden a los valores de los puntos de datos que queremos encajar, en los ejes x y y, respectivamente; el tercer parámetro especifica el grado de nuestra función polinómica. Dado que queremos un ajuste lineal, especificaremos un grado igual a 1. Las salidas de la función polyfit() serán una lista que contendrá los parámetros de ajuste; el primero es el que en la función se multiplica por el término de grado más alto; los demás siguen este orden.

import numpy as npfrom numpy import random #it will be useful for generating some random noise (on purpose) in the data points that we want to fitimport matplotlib.pyplot as plt #for plotting the data#---LINEAR FIT----#generate the x arrayx = np.linspace(0,60,60) # generate an array of 60 equally space points#generate the y array exploiting the random.randint() function to introduce some random noisey = np.array() #each element is a random number with value between +-2 the respective x axis value#Applying a linear fit with .polyfit()fit = np.polyfit(x,y,1)ang_coeff = fitintercept = fitfit_eq = ang_coeff*x + intercept #obtaining the y axis values for the fitting function#Plotting the datafig = plt.figure()ax = fig.subplots()ax.plot(x, fit_eq,color = 'r', alpha = 0.5, label = 'Linear fit')ax.scatter(x,y,s = 5, color = 'b', label = 'Data points') #Original data pointsax.set_title('Linear fit example')ax.legend()plt.show()

Como se mencionó anteriormente, la variable fit contendrá los parámetros de ajuste. El primero es el coeficiente angular, el último la intersección. En este punto, para trazar nuestro ajuste, tenemos que construir los valores del eje y a partir de los parámetros obtenidos, utilizando los valores originales del eje x. En el ejemplo, este paso se describe mediante la definición de la variable fit_eq. Lo último que queda es trazar los datos y la ecuación de ajuste. El resultado es:

Ajuste polinómico de segundo grado

En este segundo ejemplo, crearemos un ajuste polinómico de segundo grado. Las funciones polinómicas de este tipo describen una curva parabólica en el plano xy; su ecuación general es:

y = ax2 + bx + c

donde a, b y c son los parámetros de ecuación que estimamos al generar una función de ajuste. Los puntos de datos que encajaremos en este ejemplo, representan la trayectoria de un objeto que ha sido lanzado desde una altura desconocida. Aprovechando la función .polyfit(), ajustaremos la trayectoria del objeto que cae y también obtendremos una estimación de su velocidad inicial en la dirección x, v0.

#-----POLYNOMIAL FIT----x = np.array() # x coordinatesy = np.array() # y coordinatesfit = np.polyfit(x, y, 2)a = fitb = fitc = fitfit_equation = a * np.square(x) + b * x + c#Plottingfig1 = plt.figure()ax1 = fig1.subplots()ax1.plot(x, fit_equation,color = 'r',alpha = 0.5, label = 'Polynomial fit')ax1.scatter(x, y, s = 5, color = 'b', label = 'Data points')ax1.set_title('Polynomial fit example')ax1.legend()plt.show()

Una vez inicializados los arrays x y y que definen la trayectoria del objeto, aplicamos la función .polyfit(), esta vez insertando «2» como grado de la función de ajuste polinómico. Esto se debe a que la trayectoria de un objeto que cae se puede describir mediante un polinomio de segundo grado; en nuestro caso, la relación entre las coordenadas x y y viene dada por:

y = y0 – ½ (g/ v02)x2

donde y0 es la posición inicial (la altura desde la que se ha lanzado el objeto), g la aceleración de la gravedad ( 9,81 m/s2) y v0 la velocidad inicial (m/s) en la dirección x (visite: https://en.wikipedia.org/wiki/Equations_for_a_falling_body para más detalles). Luego asignamos a las variables a, b y c el valor de los 3 parámetros de ajuste y definimos fit_equation, la ecuación polinómica que se representará; el resultado es:

Si ahora imprimimos los tres parámetros de ajuste, a, b y c, obtenemos los siguientes valores: a = -0.100 , b = 0.038, c = 24.92. En la ecuación que describe la trayectoria de un cuerpo en caída no hay un término b; dado que el ajuste es siempre una aproximación del resultado real, siempre obtendremos un valor para todos los parámetros; sin embargo, notaremos que el valor de nuestro término b es mucho menor que los demás y puede descuidarse de alguna manera, al comparar nuestro ajuste con la ecuación que describe la física del problema. El término c representa la altura inicial (y0), mientras que el término a describe la cantidad – ½ (g/ v02). Por lo tanto, la velocidad inicial v0 viene dada por:

v0=2-g2a

Dando como resultado el valor final de v0 = 6,979 m/s.