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

Erstellung von Plots / Subplots optimieren

 

JN78
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 69
Anmeldedatum: 18.05.09
Wohnort: Stuhr
Version: R2010b, R2011a
     Beitrag Verfasst am: 21.09.2010, 13:54     Titel: Erstellung von Plots / Subplots optimieren
  Antworten mit Zitat      
Hallo Zusammen,

ich bin dabei meine m-File zu optimieren, um die Speicherbelegung und Verarbeitungszeit zu minimieren. In meiner File lasse ich mehrere Figure erstellen, eines davon mit 6 Subplots. Zur besseren Auswertung meiner Signale soll eine Linie durch den Mittelwert in den Plot gelegt werden.

Code:

...
subplot(3,2,3)
plot(t,b,'r')
hold on
plot(t,b_mean,'y');
hold on
grid on
ylabel('Beschleunigung [m/s²]')
xlabel('Zeit t [s]')
title(sprintf('Beschleunigungsverlauf %s File: %d \nMean: %02.3g Min: %02.3g Max: %02.3g',Sensoren{sensor2}, f, b_mean, b_min, b_max))
...


klappt alles wunderbar, nur dauert das unerträglich lang. Wenn ich
Code:
plot(t,b_mean,'y');
rauskommentiere dann gehts um einiges schneller (~10 Sekunden Zeitersparnis). Da wird doch eigentlich nur eine Linie gedruckt, ich frage mich was da solange bei dauert. Da das in jedem Subplot (also 6 Mal) gemacht wird, kann ich mir gut eine Minute Zeit sparen. Hat jemand eine Idee, wie man das schneller machen kann?

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 21.09.2010, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

weiss nicht ob dies die maximale Optimierung ist, aber in dem von mir gebastelten Beispiel (auf meinen PC) auf jeden Fall schonmal den Faktor 80 schneller.

Code:

t = 1:100000;
b = rand([1 100000]);
b_mean = mean(b);

tic
subplot(3,2,3)
plot(t,b,'r')
hold on
% plot(t,b_mean,'y'); --> 19.5 Sekunden
plot(t,repmat(b_mean,1,numel(t)),'y'); % 0.24 Sekunden
hold on
grid on
ylabel('Beschleunigung [m/s²]')
xlabel('Zeit t [s]')
toc
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
JN78
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 69
Anmeldedatum: 18.05.09
Wohnort: Stuhr
Version: R2010b, R2011a
     Beitrag Verfasst am: 21.09.2010, 15:44     Titel:
  Antworten mit Zitat      
ja danke, das ist schon einmal deutlich schneller.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.09.2010, 17:01     Titel: Re: Erstellung von Plots / Subplots optimieren
  Antworten mit Zitat      
Hallo Jan 78,

In Deinem Code-Ausschnitt wird sehr oft auf GCA zugegriffen, ohne dass man es sieht: PLOT, HOLD (doppelt?), GRID, YLABEL, XLABEL, TITLE.
SUBPLOT ist auch ausgesprochen langsam, da es die Figure nach existierenden AXES-Objekten mit passenden Positionen durchsucht und dabei Rundungsfehler akzeptiert. Wenn man die Achsen einfach nur hübsch verteilen will, geht das viel schneller, wenn man einfach die Position entsprechend setzt (die kann man sich ja von SUBPLOT abschauen).
Wenn man nur eine Linie für den Mittelwert zeichnen möchte, reichen die Start- und Endpunkte.

Vorschläge:
Code:

FigH = figure('nextplot', 'add');
AxesH = ('Position', [0.13, 0.40963, 0.33466, 0.21574], ...
   'Parent', 'FigH', ...  % Safer to define it explicitely
   'XGrid', 'on', 'YGrid', 'on', ...   % Avoid "GRID ON"
   'NextPlot', 'add');  % Avoid "HOLD ON"
line(t, b, 'Color', [1, 0, 0], 'Parent', AxesH);
line(t([1, end]), [b_mean, b_mean], 'Color', [1, 1, 0], 'Parent', AxesH);

set(get(AxesH, 'YLabel'), 'String', 'Beschleunigung [m/s²]');
set(get(AxesH, 'XLabel'), 'String', 'Zeit t [s]');
set(get(AxesH, 'Title'), 'String', ...
   sprintf('Beschleunigungsverlauf %s File: %d \nMean: %02.3g Min: %02.3g Max: %02.3g',Sensoren{sensor2}, f, b_mean, b_min, b_max));
 

Dies sieht zwar etwas komplizierter aus. Es verbraucht aber immer Rechenzeit, Matlab alles nötige automatisch finden zu lassen.

Weitere Rechenzeoit läßt sich sparen, wenn die Figure zunächst unsichtbar ist ("figure('Visible', 'off')"), weil dann keine Update des Displays notwendig sind, während die Figure noch erstellt wird. Erst wenn alle SubPlots fertig sind, wird die Sichtbarkeit dann eingeschaltet.

Nebenbei: Hast Du wirklich 10.000 Punkte in einem Plot? Soviele Pixel hat das Display gar nicht, oder? Eigentlich müsste es reichen, die Anzahl der Ausgabepunkte auf die Anzahl der verfügbaren Pixels zu reduzieren. Das ist leider nicht trivial, sollte die Rechenzeit aber dramatisch reduzieren.

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JN78
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 69
Anmeldedatum: 18.05.09
Wohnort: Stuhr
Version: R2010b, R2011a
     Beitrag Verfasst am: 21.09.2010, 18:31     Titel:
  Antworten mit Zitat      
Wow, das ist mal eine amtliche Ansage - vielen Dank erstmal dafür.
Ich werd mir das gleich mal in Ruhe durcharbeiten und dann berichten wie das Endprodukt aussieht. Der erste Vorschlag hier war schon sehr hilfreich und hat die Dauer drastisch reduziert, aber man will ja immer noch nen bisserl mehr lernen.
Also soweit Euch erstmal besten Dank.


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