Lorentzsche scipy.optimize.leastsq Anpassung an Daten schlägt fehl

8

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.

Was ich gerne machen würde

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.

Problembeschreibung

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%     
user2082635 18.02.2013, 09:57
quelle

1 Antwort

7

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:

%Vor%

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])

    
Joel Vroom 28.08.2013 18:25
quelle