Verfasst am: 11.04.2020, 14:14
Titel: Optimierungsfunktion mit Methode der kleinsten Quadrate
Guten Tag,
ich habe folgendes Problem: Ich habe eine Kostenfunktion, welche mit Hilfe der Methode der kleinsten Quadrate gelöst werden soll bzw. sollen 4 unabhängige Variablen ermittelt werden. Das grobe Vorgehen ist im Bild dargestellt, wobei der Vektor x meine Optimierungsvariablen beinhaltet.
Meine Frage lautet jetzt, wie ich dieses Vorgehen in ein Optimierungsproblem umwandle, welches von zB. lsqnonlin gelöst werden kann? Also wirklich nur die function, wie ich diese dann aufrufe und Optionen für den solver setze weiß ich. g(t) bezieht sich übrigens auf Messdaten, welche natürlich auch einzeln eingeladen werden müssen..
Mein Ansatz sieht wie folgt aus:
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 ;)
Erstmal vielen Dank für die Antwort, ja die Daten müssten nicht jedes mal einzeln geladen werden da hast du recht, werde das verbessern. Mein Hauptprogramm sieht wie folgt aus:
lb = [-2*pi, -2*pi, -2*pi, -2*pi]; %untere Grenze der Winkel (max-360 Grad für azimuth and inclination angles)
ub = [2*pi, 2*pi, 2*pi, 2*pi]; %obere Grenze der Winkel (max360 Grad für azimuth and inclination angles)
%% Finde Minimum (leasts squre incl. Jacobian)
opts = optimoptions(@lsqnonlin,'SpecifyObjectiveGradient',true);
fun = @dynamic_constraints;
[x,resnorm,res,eflag,output] = lsqnonlin(fun,x0,lb,ub,opts);
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 ;)
Die Fehlermeldung war komplett.. etwas Anderes zeigt er nicht an. Wenn ich dynamic_constraints(x0) aufrufe, gibt er mir einen 2392x1 Fehlervektor e aus (2392 ist die Anzahl der Messpunkte). So soll es doch eig. auch sein oder? Deshalb verstehe ich nicht, warum lsconlin nicht funktioniert. Wenn nochmal eine sum(e) berechnet und dann der fmincon benutz wird, funktioniert es, jedoch sind die Ergebnisse sehr schlecht, weshalb ich gerne auf einen Least square Algorithmus mit Jacobi zurückgreifen möchte.
Kannst du mal einen Beispieldatensatz zur Verfügung stellen (verkleinert oder verfälscht reicht), bei dem das Problem auftritt? Ohne mehr zu sehen kann ich nicht weiterhelfen.
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 ;)
sicher, dass da nicht was anderes war? Zum einen ist die zuerst verwendete Syntax laut Doku unterstützt, zum anderen passt die Fehlermeldung nicht dazu.
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 ;)
Hast recht, habe vorher beim Ausprobieren der Funktion noch die eine Zeile über der for Schleife als Kommentar gesetzt. Dies ist hier im Forum auch so drin, hatte ich bei mir nur nicht umgesetzt und deshalb vermutlich der Fehler..
Habe jetzt aber festgestellt, dass die Werte genauso schlecht sind wie beim fmincon und will daher mal versuchen nicht alle Daten auf einmal in den Fehlervektor e zu laden und zu optimieren, sondern nach und nach und jedes mal aufs neue eine lesst square Optimierung durchführen, welche dann die Optimierungsparameter anpasst. Kannst du mir vlt. sagen, wie ich es realisieren kann, dass die Optimierung in einer Schleife funktioniert, bei der jedes mal eine Messwert mehr in e geladen wird, ein neues x berechnet wird und das bis zum ende des Datensatzes.
wenn du das wirklich machen möchtest, dann die Daten außerhalb der Optimierung laden und wie im Link beschrieben an die Funktion übergeben, aber nur den benötigten Teil. Ich halte das aber nicht für zielführend.
Meine Vermutung ist, dass die schlechten Ergebnisse aufgrund nicht ausreichend guter Startwerte zustande kommen und der Solver in ein lokales Minimum läuft. Entweder kennst du also bessere Startwerte oder ich würde empfehlen, einen Ansatz aus der globalen Optimierung (z.B. multistart) zu verwenden.
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.