Ho un set di punti dati, (xey nel codice qui sotto) e sto cercando di creare una linea lineare di miglior adattamento attraverso i miei punti. Sto usando scipy.optimize.curve_fit
. Il mio codice produce una linea, ma non una linea di miglior adattamento. Ho provato a fornire i parametri del modello di funzione da utilizzare per il mio gradiente e per la mia intercettazione, ma ogni volta produce la stessa identica linea che non si adatta ai miei punti dati.Perché scipy.optimize.curve_fit non produce una linea di miglior adattamento per i miei punti?
I punti blu sono i miei punti di dati la linea rossa dovrebbero essere montati:
Se qualcuno potesse precisare dove sto andando male sarei estremamente grato:
import numpy as np
import matplotlib.pyplot as mpl
import scipy as sp
import scipy.optimize as opt
x=[1.0,2.5,3.5,4.0,1.1,1.8,2.2,3.7]
y=[6.008,15.722,27.130,33.772,5.257,9.549,11.098,28.828]
trialX = np.linspace(1.0,4.0,1000) #Trial values of x
def f(x,m,c): #Defining the function y(x)=(m*x)+c
return (x*m)+c
popt,pcov=opt.curve_fit(f,x,y) #Returning popt and pcov
ynew=f(trialX,*popt)
mpl.plot(x,y,'bo')
mpl.plot(trialX,ynew,'r-')
mpl.show()
Sono riuscito a capire il problema da solo. x era definito come una lista, non come una matrice. L'ho risolto semplicemente mettendo np.array nella parte anteriore degli array x e y definiti. –
Sono arrivato alla stessa conclusione Lizi, avrei dovuto vedere prima questo commento! La prossima volta che succede, sentiti libero di postarlo come una risposta alla tua stessa domanda e accettarlo. – Hooked
Si noti che questo è stato corretto: https://github.com/scipy/scipy/issues/3037 – Hooked