Da ich einen Vortrag über Python gehalten habe, wollte ich ihn für meine Daten verwenden. Obwohl ich schon seit einer Weile versuche, habe ich immer noch keine Ahnung, warum das nicht funktioniert.
Nehmen Sie eine Datendatei nach der anderen aus einem Unterordner (hier: "Test"), transformieren Sie die Daten ein wenig und passen Sie sie mit einer Lorentz-Funktion an.
Wenn ich den unten angegebenen Code ausführe, passt er nicht und gibt nur meine anfänglichen Parameter nach 4 Funktionsaufrufen zurück. Ich habe versucht, die Daten zu skalieren, mit ftol
und maxfev
herumzuspielen, nachdem ich die Python-Dokumentation immer wieder überprüft habe, aber nichts verbessert. Ich habe auch versucht, die Listen zu numpy.arrays
explizit zu ändern, sowie die Lösung, die der Frage gegeben wurde. scipy.optimize.leastsq gibt die besten Schätzwerte zurück nicht neu bestmöglich , x = x.astype(np.float64)
. Keine Verbesserung. Seltsamerweise funktionierte für ein paar ausgewählte Datendateien dieser Code irgendwann, aber für die meisten Fälle nie. Es kann definitiv angepasst werden, da eine Levenberg-Marquard-Anpassungsroutine in Origin relativ gute Ergebnisse liefert.
Kann mir jemand sagen, was schief läuft oder Alternativen aufzeigen?
%Vor% Ohne Ihre Daten zu sehen, ist es schwer zu sagen, was schief läuft. Ich habe ein zufälliges Rauschen erzeugt und den Code verwendet, um eine Anpassung vorzunehmen. Alles funktioniert gut. Dieser Algorithmus erlaubt keine Parametergrenzen, so dass es zu Problemen kommen kann, wenn Ihr p0
nahe Null ist. Ich habe folgendes getan:
Dies ergab eine Lösung von:
solp = array([ 0.51779002, 0.26727697, 1.02946179])
Was nahe am theoretischen Wert liegt:
np.array([0.5, 0.25, 1.0])
Tags und Links python numpy scipy least-squares data-fitting