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

Parameteroptimierung

 

Chris987
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2013, 16:37     Titel: Parameteroptimierung
  Antworten mit Zitat      
Hallo liebe Gemeinde,

dies ist mein erster Beitrag. bevor ich mit meiner ersten Frage komme, kurz zu mir. Ich arbeite seit einem Monat mit Matlab, das erste mal "richtig" programmieren, und studiere Maschinenbau.

Ich hoffe das problem ist hier richtig. (falls nicht bitte verschieben)

Zu meinem Problemfall. Ich habe Messwerte und Simulationswerte. Die Simulationswerte lasse ich mir über mehrere (zusammengehörige) Formeln aus einer Veröffentlichung berechnen. In diesen Formeln gibt es drei Parameter (c1,c2,c3).
Die Schwierigkeit für mich liegt nun darin, mathematisch adäquat mit Matlab zu formulieren. Die erwähnten drei Parameter möchte ich neu bzw. optimal bestimmen. (Idee: Methode der kleinsten Fehlerquadrate).

In die drei Gleichungen (die je eine der Konstanten enthalten) werden Messwerte Druck, Temperatur etc. eingelesen. Der Simulationswert kommt durch das Aufsummieren der Schleifeniterationen zustande.

Für jede Messung wird also einmal eine komplette Forscheife durchlaufen. In jeden Durchlauf werden die jeweils gültigen Werte für p,T usw. eingesetzt.

Gleichung1: ein Produkt wird gebildet *p*T*c1
Gleichung2: bestehende Produktmenge wird oxidiert*p*T*c2
Gleichung2: bestehende Produktmenge wird (anders) oxidiert*p*T*c3

Nach Beenden der Schleife ist die aktuelle Produktmenge mit dem oben erwähnten Messwert zu vergleichen. (das habe ich für ausreichend viele Messungen vorliegen).

Meine Idee ist es das Minimum hiervon für c1, c2, c3 zu finden:
\sum\limits_{k=1}^n | | (\sum\limits_{k=1}^n Produkt)  -  Messwert  |  | ^{2}

Das "Produkt" einer einzelnen Schleife ist dabei Gl1 - Gl2 - Gl3

Die innere Summe ist gewissermaßen das Ergebnis des oben beschrieben n-fachen Schleifendurchlaufs der drei Gleichungen.

Ich weiß nun leider nicht, wie ich dies konkret formulieren kann.
Ich denke fminsearch wäre hier sinnvoll.

1. Hoffentlich habe ich meine Fragestellung verständlich gestellt. und keine elementar banale Sache übersehen.
2. Wie kann ich sie euch verständlicher machen?
3. Hat jemand eine Idee oder einen Ratschlag?

jedem der sich ein bischen hiermit beschäftigt sei schon einmal gedankt.

Lieben Gruß
Chris
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 14.03.2013, 09:36     Titel:
  Antworten mit Zitat      
Hallo,

besteht die Frage noch?

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris987
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2013, 09:49     Titel:
  Antworten mit Zitat      
Hallo,

die Frage ist noch aktuell, ich will aber einfach mal meinen Lösungsansatz hier zur Diskussion stellen.

Ich konstruiere seit gestern eine Schleife, die das Problem lösen soll.
Sie ist leider sehr primitiv und erfordert noch einiges an Abstimmungsarbeit.

Die Variablen auf einmal zu bestimmen, ist mir noch zu unübersichtlich, darum probiere ich, die drei Variablen nacheinander zu optimieren.
ich stelle hier mal den Code rein.

Code:
load Ruß_Vergleich_120404; % eeps_russconc Mikrogramm/cm³

%Parameter Startwertfestlegung Hassaneen
c1=1;
c2=8903;
c3=105;
c4=5; %Wachstumskonstante
c5=3; %Schrumpfungskonstante

%Parameter Bashirnazed: 84/8903/105
%Parameter Brookes:     324/0/0.35
%Paramter  Leung:       6300/715/0.36

for n=1:20
    % Aufruf Rußsimulation
    R_sim = Rparamoptimizer(c1,c2,c3);
   
   
    %Hassaneen-Fehler-Quadratsumme bilden; soll im Verlauf möglichst klein werden
    S1 = sum((R_sim - eeps_russconc).^2);
   
   
    % If-Verzweigung für Summenvergleich, zweite Fehler-Quadratsumme
    % bilden, falls keine existiert
    exist S_bigger;
    if ans == 1   % wenn eine andere,größere Summe schon existiert ;ab der zweiten Iteration der Fall
       
        big_test = S_bigger > S1; %beide Quadratsummen vergleichen; 1 wenn größer
       
    else % zweite Fehler-Quadratsumme bilden; WIRD NUR IN DER ERSTEN SCHLEIFE DURCHLAUFEN
        c1=c1+10;
        R_sim_bigger = Rparamoptimizer(c1,c2,c3);
        S_bigger     = sum((R_sim_bigger - eeps_russconc).^2);
       
        big2_test = S_bigger > S1; % Prüfung ob Fehlersumme S_bigger größer ist als die Hassaneen-Fehlersumme
    end
   
    if big2_test ==0 || big_test == 0  % Wenn c1++ zu einer kleineren Summe führt, c1 weiter vergrößern
        c1 = c1+c4;
        c1
    elseif big2_test == 1 || big_test == 1 % Wenn zu c1++ zu einer schlechteren Summe führt, c1- ein bischen verkleinern
        c1 =c1-c5;   % Rückführung von c1 regeln und dämpfen
        c5 = c5-1;
        c1
    end
   
    n
end
c1
big2_test
big_test

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PLOTVERGLEICH: MESSUNG/ HASSANEEN/HASSANEEN-OPTIMIERT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 


Das gute Stück funktioniert aber noch nicht. Es merkt leider nicht, wenn es über das Ziel "hinausschießt". da arbeite ich noch dran. Meine Variable c1 wächst immer munter weiter. sollte sie aber nur begrenzt.

Gruß
Christian
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.03.2013, 09:55     Titel:
  Antworten mit Zitat      
Hallo,

es gibt hierfür fertige Funktionalität in der Optimization Toolbox:
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 12.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2013, 10:31     Titel:
  Antworten mit Zitat      
Für diese Funktionen reicht meine Matlab-kompetenz (noch) nicht aus. Eine Schwierigkeit ist vor allem das die Funktion, an die ich c1, c2, c3 übergebe, analytisch von x gar nicht abhängt.. (ein indirekter Zusammenhang besteht naturlich schon)

Der Hinweis ist natürlich aber schon ganz richtig. Sobald ich eine zufriedenstellende Lösung erreicht habe, werde ich diese hier zeigen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.03.2013, 10:48     Titel:
  Antworten mit Zitat      
Hallo,

es sollte deutlich einfacher sein, sich mit Hilfe der Doku in die Verwendung dieser FUnktionen einzuarbeiten als sich langwierig selbst etwas zu basteln.
Die Zusammenhänge müssen dafür nicht analytisch sein.

Wenn du versuchst, die Parameter unabhängig voneinander zu optimieren, wirst du wahrscheinlich keine guten Ergebnisse bekommen.

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.