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

Langsame Laufzeit innerhalb einer Schleife

 

mowad

CARNOT-Moderator


Beiträge: 14
Anmeldedatum: 22.01.16
Wohnort: ---
Version: 2019a
     Beitrag Verfasst am: 16.04.2025, 12:53     Titel: Langsame Laufzeit innerhalb einer Schleife
  Antworten mit Zitat      
Hallo zusammen,

ich habe einen meines Achtens relativ einfachen Code im MATLAB-Skript erstellt.
Hier dazu mal ein Ausschnitt.

Code:

% Große Temperaturdifferenz am WÜ der Freien Kühlung in K
dT_max                      = max(T_FK_W_out(i,x,y,z)-T_RKW_G_out(i,x,y,z),T_N_out(i,x,y,z)-T_FK_G_out(i,x,y,z));
% Kleine Temperaturdifferenz am WÜ der Freien Kühlung in K
dT_min                      = min(T_FK_W_out(i,x,y,z)-T_RKW_G_out(i,x,y,z),T_N_out(i,x,y,z)-T_FK_G_out(i,x,y,z));
% Maximale Leistung des WÜ Freie Kühlung bei geg. Temperaturen
                if dT_max == dT_min
                    Q_FK_max(i,x,y,z)       = kA_N*dT_max;
                else
                    Q_FK_max(i,x,y,z)       = kA_N*(dT_max-dT_min)/log(dT_max/dT_min);                                              
                end
                % Beschränkung der Leistung der Freien Kühlung
                if Q_FK(i,x,y,z) > Q_FK_max(i,x,y,z)
                    Q_FK(i,x,y,z) = 0;
                end
                % Austrittstemperatur wasserseitig aus Kältemaschine in °C
                if m_KM_W(i,x,y,z) == 0
                    T_KM_W_out(i,x,y,z)     = T_N_out(i,x,y,z);
                else
                    T_KM_W_out(i,x,y,z)     = (T_N_in_Arr(i)*m_N(i,x,y,z)-T_FK_W_out(i,x,y,z)*m_FK_W(i,x,y,z))/m_KM_W(i,x,y,z);    
                end
 


Die Gesamtschleife ist sehr langsam, weshalb ich mal den MATLAB Profiler darauf angesetzt habe, der zu dem Ergebnis im Anhang kommt.
Ich verstehe jetzt nicht warum die eine Fall-Unterscheidung so dermaßen langsam ist, während die weiter unten relativ schnell durchläuft. Im Prinzip sind es doch recht ähnliche Zuweisungen, oder?

Preallocated sind alle Variablen, die Parameter ohne (i,x,y,z) sind Konstanten, die außerhalb der Schleife gesetzt werden.

Kann mir jemand einen Tipp geben, woran die langsame Ausführung liegen könnte?
Vielen Dank schonmal.

Profiler.PNG
 Beschreibung:

Download
 Dateiname:  Profiler.PNG
 Dateigröße:  38.54 KB
 Heruntergeladen:  22 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2025, 18:01     Titel:
  Antworten mit Zitat      
Hallo,

könntest du ein reproduzierbares Beispiel teilen?
Die andere Frage ist natürlich, ob die for-Schleife hier wirklich notwendig ist. Ich bezweifle es.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mowad
Themenstarter


CARNOT-Moderator


Beiträge: 14
Anmeldedatum: 22.01.16
Wohnort: ---
Version: 2019a
     Beitrag Verfasst am: 22.04.2025, 09:25     Titel:
  Antworten mit Zitat      
Teilen kann ich den Gesamtcode leider nicht, mit Schleife nicht notwendig, meinst du direkte Matrizen-Mathematik?
Da war ich mir nicht sicher genug bzgl. der Ergebnisse,
habe nämlich auch Code-Teile mit Potenzen und e-Funktionen auf die Matrizen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.04.2025, 18:18     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Teilen kann ich den Gesamtcode leider nicht

Muss auch nicht sein, sondern "nur" die for-Schleife und (z.B. zufällige) Daten mit den entsprechenden Dimensionen. Ich kann natürlich auch versuchen, selbst ein Repro-Beispiel zu basteln, allerdings ist es mir allzu oft passiert, dass ich das Problem so nicht reproduziert bekomme.

Zitat:
mit Schleife nicht notwendig

Ich dachte an logische Indizierung. Kann allerdings schwierig werden, da dT_max und dT_min in jeder Iteration neu berechnet werden.

Kannst du testhalber mal die if-Abfrage weglassen und nur den else-Teil stehen lassen? Die dann entstehenden Inf lassen sich vielleicht nachträglich bereinigen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.04.2025, 18:24     Titel:
  Antworten mit Zitat      
Hallo nochmal,

wenn die Schleifen nicht entfernbar sind, kann eine Alternative das Erzeugen einer MEX-Datei mit MATLAB Coder sein.
https://www.mathworks.com/help/code.....gorithm-acceleration.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 2025 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.