python - fit - ajuste de curva de nudo/scipy de pitón
numpy fit (2)
Tengo algunos puntos y estoy tratando de ajustar la curva para estos puntos. Sé que existe la función scipy.optimize.curve_fit
, pero no entiendo la documentación, es decir, cómo usar esta función.
Mis puntos: np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
¿Alguien puede explicar cómo hacer eso?
Le sugiero que comience con un ajuste polinomial simple, scipy.optimize.curve_fit
intenta ajustar una función f
que debe conocer a un conjunto de puntos.
Este es un simple ajuste polinómico de 3 grados usando numpy.polyfit
y poly1d
, el primero realiza un ajuste polinomial de mínimos cuadrados y el segundo calcula los nuevos puntos:
import numpy as np
import matplotlib.pyplot as plt
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 3)
f = np.poly1d(z)
# calculate new x''s and y''s
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)
plt.plot(x,y,''o'', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()
Primero tendrá que separar su matriz numpy en dos matrices separadas que contienen valores xey.
x = [1, 2, 3, 9]
y = [1, 4, 1, 3]
curve_fit también requiere una función que proporcione el tipo de ajuste que le gustaría. Por ejemplo, un ajuste lineal usaría una función como
def func(x, a, b):
return a*x + b
scipy.optimize.curve_fit(func, x, y)
devolverá una matriz numpy que contiene dos arrays: la primera contendrá los valores de b
que mejor se ajusten a sus datos, y la segunda será la covarianza de los parámetros de ajuste óptimos.
Aquí hay un ejemplo para un ajuste lineal con los datos que proporcionó.
import numpy as np
from scipy.optimize import curve_fit
x = np.array([1, 2, 3, 9])
y = np.array([1, 4, 1, 3])
def fit_func(x, a, b):
return a*x + b
params = curve_fit(fit_func, x, y)
[a, b] = params[0]
Este código devolverá a = 0.135483870968
y b = 1.74193548387
Aquí hay un diagrama con sus puntos y el ajuste lineal ... que claramente es malo, pero puede cambiar la función de ajuste para obtener el tipo de ajuste que desee.