WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Curve Fitting/Optmization mit Nebenbedingung

 

monophonique

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 15:26     Titel: Curve Fitting/Optmization mit Nebenbedingung
  Antworten mit Zitat      
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.

Viele dank
Monophonique


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2014, 15:29     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
monophonique

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2014, 11:25     Titel: Zielfunktion unklar
  Antworten mit Zitat      
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) = \sum_x( g(x,a,b)-y(x) )^2
wobei y(x) meine Messwerte sind, x ein Vektor mit den X-werten meiner Messwerte und
g(x,a,b) =  \frac{1}{\sqrt{2pi}*a} \exp(-0.5((x-b)/a)^2)
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 Wink
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.07.2014, 12:05     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
monophonique

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2014, 09:12     Titel:
  Antworten mit Zitat      
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);
     
end


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 (line 288)
FUN must be a function, a valid string expression, or an inline function object.

Error in fmincon (line 427)
   funfcn = optimfcnchk(FUN,'fmincon',length(varargin),funValCheck,flags.grad,flags.hess,false,Algorithm);


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..

Grüße und Danke für die bisherige Hilfe Wink
Matze
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2014, 11:02     Titel:
  Antworten mit Zitat      
Hallo,

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.

Dein x und y sind feste Parameter. Wie diese übergeben werden müssen, ist auch aus der Doku von fmincon verlinkt (und auch im Forum schon desöfteren):
http://www.mathworks.com/help/optim.....ing-extra-parameters.html

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.