Verfasst am: 10.08.2010, 09:12
Titel: lange Rechenzeit
Hallo,
nach dem mein Speicherplatzproblem gelöst scheint, habe ich ein Rechenzeitproblem durch die for-schleifen bekommen. Ich habe mein Problem mit Beispielwerten gerechnet und er rechnet jetzt seit über 14 Stunden daran. Gibt es möglichkeiten das zu beschleunigen - mein for-Schleifen durchlaufen zum Teil 10.000x500x100 arrays, das wird so seine Zeit in Anspruch nehmen. Gibt es Möglichkeiten das zu beschleunigen - eine Rechenzeit von max. 1 Stunde geht in Ordnung; aber länger darf es wohl nicht sein. Die Vektorisierung gestaltet sich schwierig, da ich die Möglichkeiten nach meinem Matlab-verständnis ausgenutzt habe (arbeite seit 3 Monaten intensiver mit Matlab)
Ein Beispiel aus meinen Programm:
Code:
for k=1:b; % Beginne in b for j=2:T; % in der Zeitstufe j for i=2:n; % im Zustand i
sieh Dir mal den find-Befehl an. Mit dessen Hilfe kannst du alle deine if-Abfragen ersetzen und dadurch dann auch die for-Schleifen. Noch einfacher wäre es bestimmt mit der logischen Indizierung, die ich versuche mal auf eine deiner if-Abfragen anzuwenden, wobei Dir gleichzeitig die for-Schleife erspart bleibt.
idx = u == 1% idx ist ein logisches Array, das dort 1 ist, wo u==1 und 0, wo u~=1 % nun musst du das Indexarray noch so umrechnen, dass du von i-1 und j-1 auf i und j kommst und dann machst du eine einfache Zuweisung
u(idx) = x(idx);
Das sollte für eine deiner if-Abfragen das tun, was du Dir wünschst. Für die Indexumrechnung könntest du es mit dem circshift-Befehl separat angewendet auf die erste und zweite Dimension deines Arrays versuchen. Vielleicht fällt Dir auch was besseres ein, musst du mal schauen. Auf analoge Weise kannst du alle deine if-Abfragen und die for-Schleifen darum ersetzen.
Das sollte jedenfalls bedeutend schneller sein.
Viele Grüße,
Ralf
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
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.