Verfasst am: 26.03.2020, 11:30
Titel: Optimierungsproblem - local minimum found
Hallo allerseits,
ich habe eine m.file erstellt und greife aus meinem Hauptskript auf meine Modellfunktion zu, die an die Messdaten angepasst werden soll.
Ebenfalls habe ich die Fitsyntax für
aus der Dokumentation übernommen und plotte meine Startwerte problemlos.
Der Solver iteriert aber nicht. Stattdessen findet er gemäß der Nachricht ein lokales Minimum:
Code:
message: 'Initial point is a local minimum.↵↵Optimization completed because the size of the gradient at the initial point ↵is less than the selected value of the optimality tolerance.↵↵Stopping criteria details:↵↵Optimization completed: The final point is the initial point.↵The first-order optimality measure, 0.000000e+00, is less than↵options.OptimalityTolerance = 1.000000e-16.↵↵Optimization Metric Options↵relative first-order optimality = 0.00e+00 OptimalityTolerance = 1e-16(selected)'
Ich habe schon versucht meine Startwerte geringfügig und auch markant zu verändern, wie es in der Doku empfohlen wird.
Dieses Problem ist mein Hauptproblem, weshalb die Fits nicht klappen.
Vielen Dank vorab für eventuelle Anmerkungen und Tipps
wie eben schon gesagt: ohne das reproduzieren oder zumindest deinen Code sehen zu können kann man dir nicht helfen.
Die Meldung an sich ist ja klar. Wieso diese Meldung kommt, kann man dir aber so nicht beantworten ohne zu sehen, was du machst.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Wenn ich die Funktion mit den Startwerten plotte und "ydata" nicht von "yfit" subtrahiere, so bekomme ich eine Funktion in der Nähe meiner Messdaten heraus. Sobald ich aber "ydata" von "yfit" subtrahiere, kommt etwas ganz seltsames dabei heraus.
Ich habe einen Ausschnitt des Verlaufs einiger Messwerte kurz nach dem Startzeitpunkt als Bild angehängt (grüne Kurve). Die zweite rote Kurve stellt den fehlerhaften, nicht iterierten Fit dar. Wenn das noch nicht genügt, so füge ich noch die Modellformel hinzu und schicke dir gerne - sofern erwünscht - die Messwerte als PN.
Sobald ich aber "ydata" von "yfit" subtrahiere, kommt etwas ganz seltsames dabei heraus.
Das sind die Abweichungen zwischen Fit und Daten, die Residuen. Das sollte dann um die 0 herum schwanken.
Zitat:
Wenn das noch nicht genügt, so füge ich noch die Modellformel hinzu und schicke dir gerne - sofern erwünscht - die Messwerte als PN.
Genügt leider noch nicht. Bitte also alles zur Verfügung stellen, damit ich das nachvollziehen kann.
Edit: gerade nochmal drauf geschaut. Deine Fit-Funktion hängt überhaupt nicht von p ab. Damit kommt für jedes p derselbe Wert raus, und damit ist jeder Startwert auch ein lokales Minimum. Die Funktion muss so aussehen:
yfit = @(p) irgendwas mit p
Ob das natürlich das ist, was du optimieren willst, weiß der Himmel.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
ja, ich hab versehentlich die Variablen aus x0 eingetragen und nicht die Komponenten x(1) und x(2) direkt, die variiert werden sollen.
In meiner Hauptformel tauchen die Startwerte aber auf. Hier nochmal der die Formel + den Fit.
Code:
function[ Sig ] = fit_fun( xdata, x(1), x(2), DS, N )
function [ Sig ] = fit_fun( xdata, x(1), x(2), DS, N )
Wenn deine Funktion so aussieht, dann bekommst du sofort einen Syntaxfehler. So kann sie also nicht aussehen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
hab die x(1) und x(2) wieder durch a und b erstetzt und kann mit varrierenden Startwerden meine Formel manuell gut anpassen. Sobald aber diese "ydaten" ins Spiel kommen bekomme ich als Anpassung nur noch eine Gerade. Mir ist leider nicht ersichtlich durch was das Problem hervorgerufen wird.
mir auch nicht, ohne den aktuellen Stand zur Verfügung zu haben sowie die Daten.
PN habe ich keine erhalten.
Nur sicherheitshalber: yfit sind derzeit die Residuen, die möglichst auf 0 gebracht werden sollen. Wenn du den tatsächlichen Fit visualisieren willst, musst du ydata wieder addieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.