import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
def function(params,x)
# x son las posiciones donde voy a evaluar el modelos
# params es una tupla con los parámetros que usa el modelo
ymodel = modelo(x)
return ymodel
def Error(tpl,x,y):
# x son las posiciones reportadas
# y son los valores medidos en las posiciones x
# tpl es una tupla con los parámetros para calcular el modelo
ymodel = function(tpl,x)
errors = (ymodel - y)
return errors
p0 = [..,..,..] # Aqui ponemos nuestro "chute inicial" de los parámetros
# best será una tupla conteniendo la mejor combinación de parámetros
bestt,suss = leastsq(Errorlineal, p0, args=(x,y))
def funcline(params,x):
return params[0]*x+params[1]
def Errorlineal(tpl,x,y):
return funcline(tpl,x)-y
m = 2
b = 0.3
x = np.arange(0,10,1)
np.random.seed(1)
ruido = np.random.normal(0,1,10)
y = m*x+b
y_ruido = m*x+b + ruido
plt.plot(x,y)
plt.plot(x,y_ruido,'o')
[<matplotlib.lines.Line2D at 0x7f06c85c8df0>]
plt.plot(x,y_ruido,'o',color="darkorange")
[<matplotlib.lines.Line2D at 0x7f06c84b11c0>]
p0 = [0.6,0]
best,suss = leastsq(Errorlineal, p0, args=(x,y_ruido))
print(best)
[1.9622627 0.37267697]
ymodel = funcline(best,x)
plt.plot(x,ymodel)
plt.plot(x,y_ruido,'o',color="darkorange")
plt.plot(x,ymodel - y_ruido,'--r')
plt.axhline(y=0,color="gray")
<matplotlib.lines.Line2D at 0x7f06c84b13d0>
error = np.random.randint(1,5,10)
plt.errorbar(x,y_ruido, error,capsize=7, fmt='o')
<ErrorbarContainer object of 3 artists>