Levenberg-Marquardt NLLS konvergiert gegen initial guess der Parameter?
-
Hallo.
Für ein Projekt von mir benötige ich ein nichtlineares least squares fitting an experimentelle Daten.
Genauer gesagt geht es darum, man filmt sozusagen einen schmalen Streifen eines Teichs in den jemand irgendwo einen Stein wirft. Wenn die Wellen sich von diesem Ort ausbreiten (mit radialer Geschwindigkeit v), schneiden sie irgendwann auch den Streifen, den man beobachtet.
Aus der genauen Position und zeitlichen Änderung der Position der Wellenkämme auf dem Streifen möchte man dann den Abstand A des Ursprungpunktes von dem Streifen bestimmen. Wenn man das Problem ein wenig umformt, damit man kein Problem mit dem Definitionsbereich von Wurzeln bekommt, hat man folgende zu fittende Funktion:
Hierbei ist letzten Endes die Größe, an der man interessiert ist.
So, das Problem ist jetzt folgendes:
Für den Fitprozess wollte ich eine vorgefertigte Bibliothek benutzen, um Fehler an dieser Stelle auszuschließen und Arbeit zu sparen. Nach entsprechender Schnittstellen-Bastelei lief das auch, allerdings lieferte der Fitvorgang merkwürdige Ergebnisse. Um auszuschließen, dass an der Bibliothek (ALGLIB C++) was faul ist, habe ich eine zweite ausprobiert (Gnu Scientific Library). Auch diese führt auf merkwürdige Ergebnisse.Mit merkwürdige Ergebnisse meine ich, dass der Fitvorgang von den vorgegebenen Startwerten zunächst einen Riesensprung in die Richtung des vermuteten Ergebnisses macht (auf Basis der Jakobimatrix) und sich dann langsam wieder an die von mir vorgegebenen Startwerte herantastet, wo er dann mit einem riesigen SSR abbricht (mit der Meldung, die relative Änderung des Ergebnisses würde zu klein). Das passiert für beide Bibliotheken und alle von mir vorgegebenen Startwerte, hängt also nicht daran, dass der in ein lokales Minimum läuft.
Um dem Ganzen die Krone aufzusetzen, konvergiert das Problem in gnuplot (das auch eine Levenberg-Marquardt Variante benutzt) mit den exakt gleichen Startbedingungen innerhalb von ~10 Schritten exzellent.
Ich habe die Einträge der Jakobimatrix nachgeprüft, sichergestellt, dass die aktuellen Parameter richtig übergeben werden etc, hat jemand sonst noch eine Idee? Gibt es vielleicht Probleme mit der Konvergenz von Wurzelfunktionen, so dass man da besondere Maßnahmen ergreifen muss?
-
Sorry, Fehler in der Formel. Sollte heissen:
Hoffentlich jetzt richtig.
-
Hat sich erledigt, ich hatte einen der weiterzugebenden Werte falsch interpretiert, mein Fehler.