Polynomios


In [1]:
import numpy as np

La clase poly1D representa polinomios unidimensionales con base en sus coeficientes. Sea el polinomio $$ p(x) = 6 x^2 + x - 2 $$ su representación en NumPy es


In [5]:
p = np.poly1d([6., 1., -2.])

Se puede evaluar el valor de $p(x)$


In [6]:
p(0), p(1), p(10)


Out[6]:
(-2.0, 5.0, 608.0)

Se puede determinar el orden del polinomio con


In [8]:
p.order


Out[8]:
2

y sus raíces


In [10]:
p.roots


Out[10]:
array([-0.66666667,  0.5       ])

In [19]:
# Comprobando las raíces
p(p.roots)


Out[19]:
array([ 0.,  0.])

Y que tal el polinomio con raíces complejas $p2(x) = 2 x^2 -3 x +7$


In [22]:
np.poly1d([2.,-3.,7.]).roots


Out[22]:
array([ 0.75+1.71391365j,  0.75-1.71391365j])

Se puede obtener la gráfica del polinomio


In [18]:
import matplotlib.pyplot as plt
xvalues = np.linspace(-10.,10.,100)
plt.plot(xvalues, p(xvalues), '-')
plt.show()


Ajuste de curvas mediante polinomios

Preparación de un dataset de puntos agregando ruido a un conjunto de puntos conocidos


In [42]:
y = p(xvalues) + np.random.randn(xvalues.size)*p(xvalues).std()/2

Teniendo un conjunto de values x,y se puede determinar el polimonio que mejor se ajusta


In [43]:
# Intentar ajustar un polinomio de grado 3
np.polyfit(xvalues,y,deg=3)


Out[43]:
array([ -0.05538749,   6.24083567,   3.67718013, -17.60615176])

In [44]:
# Intentar ajustar un polinomio de grado 2
p3 = np.poly1d( np.polyfit(xvalues,y,deg=2) )
p3


Out[44]:
poly1d([  6.24083567,   0.28724632, -17.60615176])

Obtener la gráfica de las observaciones y del polinomio de mejor ajuste


In [45]:
plt.plot(xvalues, y, 'xr', xvalues, p3(xvalues), '-b')
plt.show()



In [ ]: