Ich habe eine Reihe von Datenpunkten, (x und y im Code unten), und ich versuche, eine lineare Linie der besten Passform durch meine Punkte zu erstellen. Ich benutze scipy.optimize.curve_fit
. Mein Code erzeugt eine Linie, aber keine Linie der besten Anpassung. Ich habe versucht, die Funktionsmodellparameter zu geben, die ich für meinen Gradienten und für meinen Achsenabschnitt verwende, aber jedes Mal erzeugt es exakt dieselbe Linie, die nicht zu meinen Datenpunkten passt.Warum erstellt scipy.optimize.curve_fit keine optimale Linie für meine Punkte?
Die blauen Punkte meine Datenpunkte die rote Linie werden sollen montiert werden:
Wenn jemand darauf hinweisen könnte, wo ich falsch werde würde ich sehr dankbar sein:
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()
Ich schaffte es, das Problem selbst herauszufinden. x wurde als Liste definiert, nicht als Array. Ich habe es einfach repariert, indem ich np.array an die Front der x- und y-Arrays gesetzt habe. –
Ich kam zu demselben Schluss Lizi, ich hätte diesen Kommentar zuerst sehen sollen! Das nächste Mal, wenn das passiert, kannst du es als Antwort auf deine eigene Frage posten und es akzeptieren. – Hooked
Beachten Sie, dass dies gepatcht wurde: https://github.com/scipy/scipy/issues/3037 – Hooked