Soy nuevo en scipy y matplotlib, y he estado tratando de ajustar las funciones a los datos. El primer ejemplo en el Scipy Cookbook funciona fantásticamente, pero cuando lo intento con los puntos leídos de un archivo, los coeficientes iniciales que doy (p0 a continuación) nunca parecen cambiar realmente, y la matriz de covarianza siempre es INF.Uso de curve_fit para ajustar datos
He intentado ajustar datos uniformes siguiendo una línea, fue en vano. ¿Es un problema con la forma en que estoy importando los datos? Si es así, ¿hay una mejor manera de hacerlo?
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy as sy
with open('data.dat') as f:
noms = f.readline().split('\t')
dtipus = [('x', sy.float32)] + [('y', sy.float32)]
data = sy.loadtxt(f,delimiter='\t',dtype=dtipus)
x = data['x']
y = data['y']
def func(x, a, b, c):
return a*x**b + c
p0 = sy.array([1,1,1])
coeffs, matcov = curve_fit(func, x, y, p0)
yaj = func(x, coeffs[0], coeffs[1], coeffs[2])
print(coeffs)
print(matcov)
plt.plot(x,y,'x',x,yaj,'r-')
plt.show()
Gracias!
¡Sí, gracias! Cargando los datos con solo loadtxt lo hizo. Parece que estaba tratando de hacerlo de la manera difícil, pero seguiré investigando lo que estaba pasando mal. – Ironil