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

Steuerung der Zeitschritte über Matlab bei Parallelisierung

 

Ingwertee

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2014, 18:13     Titel: Steuerung der Zeitschritte über Matlab bei Parallelisierung
  Antworten mit Zitat      
Hallo,

ich möchte über ein Matlab-Script eine Simulink-Simulation starten. Diese möchte ich parallelisieren und mit verschiedenen Startwerten bzw. Parametern ausstatten.
Das einzige Problem ist, dass ich die benötigten Zeitpunkte nicht mehr direkt abgreifen kann, wenn ich die parfor Funktion nutze.

Hier mal ein Ausschnitt meiner ersten Test-Funktion:

Code:

% Alter Code, der funktioniert
model = 'MMKinetic2';
time   = [0:10:100]';
options = simset('SrcWorkspace','current');

% model laden, parameter etc. definieren

simOut  = sim(model,time,options);
close_system(model,0);
 


Wird nun die parfor-Funktion hinzugefügt (Beispiel ist verkürzt), Code basiert auf: sim in parfor with Normal Mode

Code:

% Neuer Code, der eingeschränkt funktioniert
model = 'MMKinetic2';
time   = [0:10:100]';

% parpool und spmd

% model laden, parameter etc. definieren

parfor idx=1:iterations  
% definieren der Variablen ...

simout(idx) = sim(model, 'SimulationMode', 'normal')
% simout(idx) = sim(model, time, 'SimulationMode', 'normal')
% -> mit time in sim() erfolgt eine Fehlermeldung (siehe unten)
end

    cd(currDir);
    rmdir(tmpDir,'s');
    rmpath(currDir);
    close_system(model, 0);
end
 


Ohne time werden die default-Zeitwerte genommen [0 10].
Fehlermeldung, wenn sim() mit time in der parfor-loop ausgeführt wird: The "OPTIONS" parameter must be a structure created by SIMSET

Für mich stellt sich die Frage, wie ich zu den spezifischen Zeiten die Simulationsdaten abfangen kann. Dabei kann der Zeitvektor auch so aussehen: time = [0 1.98 4 5 18 19 20 23.5 40.12]

Eine Krüppeloption wäre über eine Unterschleife die Start- bzw. Endwerte auf time(i) bzw. time(i+1) zu setzen und dann i hochzählen. Die Lösung finde ich aber sehr unbequem, da ich ständig das Model mit den Variablen aktualisieren müsste und die Geschwindigkeit darunter leiden dürfte.


Ingwertee
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 17.12.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2014, 08:04     Titel:
  Antworten mit Zitat      
Die Output-Zeiten können so erzwungen werden:

Code:
set_param(model, 'OutputTimes', ['[',num2str(time),']'])
[data.t, data.y ]= sim(model )
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.