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

Ändern des Startwerts eines Integrators innerhalb Funktion

 

Odem
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 24.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2015, 08:40     Titel: Ändern des Startwerts eines Integrators innerhalb Funktion
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


@Johannes

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2015, 13:59     Titel:
  Antworten mit Zitat      
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

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 24.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2015, 14:07     Titel:
  Antworten mit Zitat      
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 Smile

Viele Grüße

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