|
|
Ändern des Startwerts eines Integrators innerhalb Funktion |
|
Odem |
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 24.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.09.2015, 08:40
Titel: Ändern des Startwerts eines Integrators innerhalb Funktion
|
|
|
|
|
Hallo,
Ich nutze Simulink um ein System zu simulieren, welches durch ein Matlab-Slript optimiert wird. Hierfür verwende ich einen generischen Algorithmus (ga).
Dieser optimiert eine Fitnessfunction, welche ich ihm definiert habe. Innerhalb dieser Funktion wird das Simulink Modell mit neuen Wertepaaren einmal initialisiert und simuliert.
Nun habe ich die Funktion an neue Randbedingungen angepasst und simuliere das System zwei mal innerhalb einer Iterationsschleife. Dies bedeutet auch, dass ich das System zwei mal initialisieren will. Für "gain"-Blöcke etc. funktioniert eine erneute Belegung mit Werten nach der ersten Simulation problemlos. Leider lassen sich die Startbedingungen für meine Integratoren nicht auf diese Weise setzen. Sie verwenden auch bei der zweiten Simulation die Startbedingung, die bei der ersten Initialisierung vorgegeben wurden.
Hier ein Auszug des Codes (stark vereinfacht):
[x,fval]= ga(@Fkt,12,[],[],[],[],LB,UB,[],([5 8 9 10 11 12]),options);
Aufrufen des generischen Algorithmus mit "Fkt" als Fitnessfunction
function y = Fkt(poly)
Start der Fitnessfunction
simOut = sim('Simulation','SaveOutput', 'on');
v=simOut.get('v_k');
Simulink Modell wird simuliert mit vorgegebenen Werten. Das Ergebnis des Integrators wird mit einem "to workspace"-Block an Matlab übergeben und in einem Vektor "v" gespeichert.
vk=v(end,1);
Der Startbedingung des Integrators "vk" wird gleich dem letzten Wert des Vektors "v" gesetzt.
simOut = sim( 'Simulation', 'SaveOutput', 'on');
v2=simOut.get('v_k');
Zweite Simulation wird gestartet und die Ergebnisse des Integrators in einem Vektor "v2" gespeichert.
end
Ende einer Iterationsschleife
Ich simuliere mit einer variablen Schrittweite und Ode45 als Solver.
Weiß jemand, wie ich meine integratoren innerhalb dieser Schleife neu initialisieren kann? Ich habe es auch schon mit einer externen Quelle als Initialisierungsbedingung versucht; leider ohne Erfolg.
Über Antworten würde ich mich sehr freuen!
MfG
Odem
|
|
|
|
|
@Johannes |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.09.2015, 13:59
Titel:
|
|
Hallo,
so wie ich deinen Code und deine Ausführungen verstehe startest du deine Simulation
mit den Initialwerten die unter einem Parameter abgespeichert sind.
Wie heißt dieser initiale Parameter?
Nach der ersten Simulation schreibst du in die Variable "vk" den Endwert der letzten Simulation um ihn als Startwert für die neue Simulation zu verwenden.
Ist diese Variable "vk" als Initial Condition im Integrator eingetragen?
Gruß,
Johannes
|
|
|
Odem |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 16
|
|
|
|
Anmeldedatum: 24.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.09.2015, 14:07
Titel:
|
|
Hallo Johannes,
danke für deine Antwort.
Ja, die Variable "vk" ist in meinem Integrator eingetragen und ich versehe diese Variable auch schon bei der ersten Initialisierung mit Werten.
Ich habe das Problem jetzt gelöst bekommen. Das Problem bestand darin, dass ich den SrcWorkspace nicht auf 'current' gestellt hatte. Dadurch haben sich meine Integratoren an den alten Startwerten bedient. Im Skript selber musste ich nur folgendes ergänzen:
simOut = sim('Simulation','SaveOutput', 'on','SrcWorkspace','current');
Was ich jedoch bemerkenswert finde, ist die Tatsache, dass ich normale Gain-Blöcke und Switches auch ohne 'current' neu belegen konnte. Eine Antwort darauf habe ich leider nicht
Viele Grüße
Odem
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|