die Eingangsgrößen eines Simulinkmodells optimieren, so dass die Ausgangsgröße des Simulink-Modells minimal wird! (Als Bsp. habe ich das genommen, das unter "doc fmincon" zu finden ist! Siehe Anhang!)
Die Funktion die zu optimieren ist, in meinem Fall das Simulink-Modell, ist in xy_Regelung ausgegliedert:
Code:
% Variante1: % function f = myfun(x) % f = -x(1) * x(2) * x(3);
% Variante2: function y = xy_Regelung(x)
MDLsim = 'xy';
open(MDLsim);
set_param('xy','SimulationCommand','start');
pause(5)
Ausgang=Regelguete_ges.signals.values;
y=Ausgang(end);
Ist ja nicht so, dass ich nicht versuche selber drauf zu kommen, aber ich komm überhaupt nicht weiter.
Wäre über konkretes Beispiel, wie ich die Eingangsgrößen, kommen ja aus dem Skript, an das Modell weiterführen kann oder wie ich die Ausgangsgröße vom Modell zum Skript bekomme!!
Vielen Dank.
MfG, Waldemar
PS: Der angestrebte Aufbau resultiert aus meinem eigentlich Fall.
x=[10;10;10]; % Eingefügt, um mich erstmal mit der Ausgangsseite zu befassen!
optopt= optimset('Display','iter');
[x, fval, exitflag]=fmincon(@xy_Regelung,[10;10;10],[],[],[],[],[],[],@xy_NB,optopt);
Hab es mal mit dem debugger probiert (Brackpiont in die Zeile von assignin gesetzt) und dabei fiel mir auf, dass Regelguete_ges nach dem Durchlaufen des Simulink-Modells gar nicht in den 'base'-Workspace übergeben wurde!?
Anstelle 'base' habe ich 'caller' probiert, aber auch keine Verbesserung!
Wie kann ich denn nun in einer functionfile auf Werte des Simulink-Modells zu greifen, wenn diese - nach Beendigung der Simulation - nicht im 'base' workspace stehen?
bin ratlos.
MfG, Waldemar
PS:
Wenn ich xy_Regelung nicht als functionfile, sondern als Skript ausführe,
kann ich sofort nach dem Durchlaufen des Simulationsmodells auf Regelguete_ges zu greifen!
Muss doch auch gehen, wenn xy_Regelung eine functionfile ist!!
_________________
Im "ich brauch Hilfe"-Status
Zuletzt bearbeitet von Waldemar am 21.01.2013, 16:44, insgesamt einmal bearbeitet
wie Du richtig vermutet hast, hast Du ein Problem mit unterschiedlichen Workspaces.
Das Simulink Modell erwartet die Parameter im sogenannten Base Workspace. Wenn Du vom Command Window ein Skript ausführst, werden die Veriablen in diesem Workspace angelegt.
In Deiner Variante 2 hast Du nun eine Funktion, die einen eigenen Workspace hat und dort sind die Variablen für das Modell nicht sichtbar.
Mögliche Lösungen:
1. Angabe des SrcWorkspace für das Modell (klappt aber nur, wenn Du sim verwendest anstellen von set_param und SimulationCommand 'start')
% Entweder mit A und b (Variante1) oder über @NB (Variante2): % Variante1:
A = [-1-2-2;122];
b = [0;72];
optopt= optimset('Display','iter');
[x, fval, exitflag]=fmincon(@xy_Regelung,[10;10;10],A,b,[],[],[],[],[],optopt);
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.