Verfasst am: 28.07.2014, 15:26
Titel: Curve Fitting/Optmization mit Nebenbedingung
Hallo,
ich stehe gerade vor dem Problem ein Kurve an Datenpunkte anzupassen. An und für sich ja kein Problem man kann ja in der Curve Fitting Toolbox einige Funktionen ausprobieren und die Ergebnisse sind ja ziemlich fix da.
Nun habe ich aber spezielle Ansprüche an meine Funktion die ich auch mit der Optimizationbox nicht erfüllt bekomme.
Nämlich soll das Integral unter meine Funktion einen bestimmten Wert annehmen (1), hat da jemand eine Idee zu?
Ich bin bis jetzt durch googlen auch nicht schlau geworden überall wird nur behandelt wie man das macht wenn spezielle Parameter der Funktion größer/kleiner/gleich einem Wert sein müssen. Für das konkrete Problem habe ich nicht gefunden.
du kannst fmincon verwenden mit der Norm der Abweichungen als Zielfunktion.
Vielleicht zuerst mal versuchen, das Problem ohne Beschränkungen mit fmincon hinzubekommen und dann die NB einzuarbeiten.
Okay die funktion fmincon sieht schonmal ganz gut aus, leider kenne ich mich mit matlab nicht so wirklich aus und wollte eigentlich nur "schnell" mal was probieren. Deswegne folgendes Problem. Meine Zielfunktion sieht ja wie folgt aus.
f(x) =
wobei y(x) meine Messwerte sind, x ein Vektor mit den X-werten meiner Messwerte und
Das Problem ist jetzt diese Funktion zu definieren da matlab sich ständig beschwert, dass a und b eben nicht definiert sind und auch meinen Vektor nicht auswerten will. Deswegen wäre ich um einen Hinweis wie man das am geschicktesten löst sehr dankbar
wenn du den Code zur Verfügung stellst, dann ist es deutlich leichter, das Problem zu erkennen. Falls du Parameter an fmincon übergeben willst (und das musst du wohl), siehe hier:
http://www.mathworks.com/help/relea.....ing-extra-parameters.html
(ist auch aus der Doku von fmincon verlinkt)
Grüße,
Harald
monophonique
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.07.2014, 09:12
Titel:
Also ich habe jetzt erfolgreich meine Funktion definiert,
Code:
function y = residues(x,v,b,y)
%Function should compute the squared difference beetween the modelfunction
%with parameters v,b and the measured values y at points x.
y = sum((1/(sqrt(2*pi)*v)*exp(-0.5*(x-b).^2/v.^2) - y).^2);
Also x und y sind jeweils Vektoren und v und b sind parameter. Die Funktion rechnet jetzt wie gewünscht die Differenz zwischen Modellwerten und Messwerten und bildet das Quadrat.
So jetzt wollte ich das in fmincon einbauen dazu hab ich mal folgendes gemacht:
Code:
>> v = params(1); m = params(2);
>> a = fmincon(residues(x,v,m,y),params,A,b);
Error using optimfcnchk (line288)
FUN must be a function, a valid string expression, or an inlinefunction object.
params soll ein Vektor mit Startwerten für v und b sein. A ist eine Einheitsmatrix und b eine beliebig gewählte Grenze (z.B.b = (100;100)).
So das der "Constraint" eben ist a < 100, b < 100.
Wie man oben sieht funktioniert das nicht so wirklich, ist fmincon denn überhaupt auf Funktionen mit mehreren Parametern ausgelegt? Ich habe auch auf der mathworks seite davon nichts gefunden..
die veränderlichen Parameter b und v müssen zu einem Vektor zusammengefasst und bei Bedarf extrahiert werden, wie z.B. x im Beispiel in der Doku von fmincon.
Jetzt sehe ich gerade, dass du ja eigentlich eine Verteilung anpassen willst? Das geht deutlich einfacher, z.B. mit fitdist oder normfit.
Grüße,
Harald
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.