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

Laufzeitprobleme beim plotten

 

Lally1508
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2014, 09:34     Titel: Laufzeitprobleme beim plotten
  Antworten mit Zitat      
Hallo zusammen
Ich hänge momentan an einem Problem, bei welchem ich nicht mehr weiterkomme. Bräuchte dabei eure Hilfe. Habe leider nichts passendes im Forum gefunden.
Zu meinem Problem.
Ich habe mir ein GUI mit GUIDE gebaut. In diesem GUI wird eine Simulation ablaufen. Mittels eines Timers, mit einer bestimmten Periode, sollen nun Daten geplottet werden. Undzwar solllen immer neue Daten dazu kommen und nicht überschrieben werden. Da das momentane Programm zu groß wäre um den Code zu posten, habe ich ein kleines rudimentäres Programm erstellt welches den gleichen Fehler aufweist. Es sind hier nur einzelne Datenpunkte die geplottet werden. Aber wie Ihr seht, wenn ihr diesen Code laufen lasst, wird die Plotzeit immer größer. Ich denke, dass es eventuell daran liegt, das der plot immer mehr gefüllt wird. Aber so möchte ich es gerne haben. Wisst Ihr vieleicht wie ich dieses Problem lösen könnte?

Code:
function varargout = Perf_Test(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Perf_Test_OpeningFcn, ...
                   'gui_OutputFcn',  @Perf_Test_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function Perf_Test_OpeningFcn(hObject, eventdata, handles, varargin)
%--Timer initialisierung
global t
t.Timer = timer('ExecutionMode', 'fixedRate', 'Period', 0.1,...
                'TimerFcn', @run_Test);
t.Counter = 0;
t.hAxes = handles.hAxes;
hold(handles.hAxes);
handles.output = hObject;
guidata(hObject, handles);

function varargout = Perf_Test_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;


function btn_Start_Callback(hObject, eventdata, handles)
global t
start(t.Timer);

function btn_Stop_Callback(hObject, eventdata, handles)
global t
stop(t.Timer);

function run_Test (mTimer, ~)
global t
tic;
plot(t.hAxes,t.Counter, rand(1));
toc;
t.Counter = t.Counter + 1;
 


Vielen Dank schonmal im vorraus!

Perf_Test.m
 Beschreibung:

Download
 Dateiname:  Perf_Test.m
 Dateigröße:  1.27 KB
 Heruntergeladen:  313 mal
Perf_Test.fig
 Beschreibung:

Download
 Dateiname:  Perf_Test.fig
 Dateigröße:  4.24 KB
 Heruntergeladen:  295 mal


Zuletzt bearbeitet von Lally1508 am 14.05.2014, 10:33, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2014, 10:13     Titel:
  Antworten mit Zitat      
Hallo,

hänge bitte auch die .fig an, damit man das Beispiel laufenlassen kann.

Generell: nicht jedes Mal neuen Plot erzeugen, sondern den bestehenden Plot aktualisieren.

Initialisierung:
Code:


Aktualisierung:
Code:
set(p, 'XData', xneu)
set(p, 'YData', yneu)


Zudem würde ich globale Variablen vermeiden und stattdessen einen der Ansätze hier verwenden:
http://www.mathworks.de/de/help/mat.....data-among-callbacks.html
z.B. getappdata / setappdata

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lally1508
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2014, 10:39     Titel:
  Antworten mit Zitat      
Danke für die Antwort.
Diesen Ansatz find ich Interessant

Code:
set(p, 'XData', xneu)
set(p, 'YData', yneu)


Habe dies schon das eine oder andere mal angewendet.

In z.B. getappdata / setappdata werd ich mich mal einlesen. Danke für den Hinweis. Mal sehen was dabei heraus kommt. Ich werde mich melden, sobald ich Ergebnisse habe.
Und nochmals danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2014, 10:53     Titel:
  Antworten mit Zitat      
Hallo,

ich war mal neugierig, wieviel das bringt. Bei mir bringt es viel :)
(.fig ist unverändert)

Grüße,
Harald

Perf_Test.m
 Beschreibung:

Download
 Dateiname:  Perf_Test.m
 Dateigröße:  1.68 KB
 Heruntergeladen:  321 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Lally1508
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2014, 09:03     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank für die Hilfe. Habe mich gestern in die Thematik get/setappdata eingelesen. Wurde leider nicht ganz schlau aus der Dokumentation von Matlab selbst. Habe dein Beispiel durchgearbeitet und bin erstaunt, das diese Methode 3x so schnell den Plotbefehl abarbeitet. Vorallem bleiben die Zeiten recht konstant.
Eine Frage dazu.
Die globale Variable t wurde jetzt ersetzt durch set/getappdata. Gehe ich recht der Annahme das du mit dem Befehl:
Code:
setappdata(handles.figure1, 'data', t)

die Variable t an das Figure "andockst"? Kann man, beim debuggen, die Variable im Workspace finden, oder kann man diese nur mit getappdata aufrufen?
Werde mir noch etwas Informationen hier im Forum besorgen. Ich bedanke mich bei dir Harald.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.05.2014, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Gehe ich recht der Annahme das du mit dem Befehl:
Code:
setappdata(handles.figure1, 'data', t)

die Variable t an das Figure "andockst"?

Ich würde eher "hinterlegen" sagen, aber grundsätzlich ja.

Zitat:
Kann man, beim debuggen, die Variable im Workspace finden, oder kann man diese nur mit getappdata aufrufen?

Mir ist nur der Weg über getappdata bekannt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lally1508
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2014, 10:17     Titel:
  Antworten mit Zitat      
Nochmals vielen Dank für die Antworten und die Hilfe.
Hab es nun in mein Programm implementiert und siehe da, ich bin von den Socken. Very Happy . Alleine der erste Bearbeitungsschritt ist 8x so schnell wie vorher. Ganz abgesehen davon, dass die Bearbeitungszeit, bei der alten Version, mit jeden Durchlauf gestiegen ist. Jetzt bleibt sie relativ konstant bei 0.00066s +/- 0.00005. Das ist mehr als ausreichend für meine Anwendung.
Vielen vielen dank Harald.
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.