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

Optimierung mit mehreren Variablen

 

ladida
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2014, 17:05     Titel: Optimierung mit mehreren Variablen
  Antworten mit Zitat      
Hallo!

Ich bin bisher wenig vertraut mit Matlab und stoße deswegen schnell an meine Grenzen. Ich habe ein Optimierungsproblem, das ich bereits mit dem Excel-Solver lösen konnte. Allerdings sind dessen Ergebnisse nicht zufriedenstellend.
Zum Problem: Ausgehend von experimentellen Versuchen stehen Kurven aus x- und y-Werten zur Verfügung. Diese sollen durch ein Modell möglichst gut abgebildet werden. Dazu gibt es mehrere Ansatzfunktionen.
Zunächst werden die experimentellen Daten im Code eingelesen und Initialwerte für die Parameter definiert, die später optimiert werden sollen (s. Quellcode). Danach werden y-Werte mit Hilfe einer Ansatzfunktion berechnet. Als Messgröße für die Optimierung soll die Summe der Fehlerquadrate gelten. Deshalb wird für jeden Punkt das Fehlerquadrat aus experimentellen und errechneten y-Werten gebildet und aufsummiert.
An dieser Stelle komme ich jedoch nicht weiter: Die Summe der Fehlerquadrate soll minimiert werden, indem die Variablen angepasst werden (Initialwerte sollen durch optimierte Werte überschrieben werden). Außerdem sollen die optimierten Werte der Variablen ausgegeben werden.
Wie ich aus einigen Forumsbeiträgen entnehmen konnte, scheint die Funktion fmincon ein probates Mittel zu sein. Allerdings scheitert es bisher an der Umsetzung.

Quellcode:
Code:
Daten_Eingabe = load ('Eingabedaten.txt');

a0 = 284.731419;  
b0 = 189.266989;  
c0 = 3.29722229;  
d0 = 0.67669557;  
Werteanzahl = size (Daten_Eingabe);  
Werteanzahl = Werteanzahl (1,1);    % Anzahl der aus dem Zugversuch ermittelten Messwerte

Y = zeros (Werteanzahl,1);
for i = 1:Werteanzahl
    Y(i,1) = a0 - b0 * exp((-c0)*Daten_Eingabe(i,1)^d0);  % Y-Werte aus
                                                                    Ansatzfunktion berechnen
end

for i = 1:Werteanzahl
    Fehlerquadrat (i,1) = (Y(i,1) - Daten_Eingabe(i,2))^2;
end

for i = 1:Werteanzahl
    Summe = sum(Fehlerquadrat);
end
 

Ich bin für jede Hilfestellung dankbar!

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.01.2014, 23:44     Titel:
  Antworten mit Zitat      
Hallo,

schau dir mal lsqcurvefit an. Da gibst du nur die Daten und das Modell vor, und der Rest wird automatisch gemacht.

Grundsätzlich solltest du darauf achten, for-Schleifen möglichst zu vermeiden, da MATLAB dadurch (unnötig) ausgebremst wird - die Stärke von MATLAB ist nämlich das Arbeiten mit Vektoren.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 01:38     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Unterstützung. Ich werd mich dem Problem bei nächster Gelegenheit widmen Wink
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 - 2025 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.