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

Matlab überspringt einfach Befehle: Plotten in Schleifen

 

Nabla
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 08.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2017, 12:54     Titel: Matlab überspringt einfach Befehle: Plotten in Schleifen
  Antworten mit Zitat      
Hallo zusammen,

auf folgendes Problem bin ich schon des öfteren gestoßen und ich konnte bis jetzt nicht wirklich feststellen, wo es herkommt.

Folgender Code sollte einen laufenden Sinus bei jedem 100000. Durchgang immer wieder neu plotten, bei mir zeigt Matlab jedoch außer dem Text in der Kommandozeile gar nichts an. Wenn ich dann die Ausführung unterbreche oder in die Schleife einen Breakpoint setze, wird beim Beenden des Skripts doch noch geplottet. Wie gesagt, bei mir kam das schon öfter vor, mit völlig unterschiedlichen plots/uicontrols. Manchmal hat ein pause(0.01) davor geholfen (hier auch), deshalb scheint es mir fast so als ob Matlab die Ausführung irgendwie zu doof ist und es einfach überspringt, außer es hat die Zeit dazu...

Selbst mit pause vor dem plot-Kommando ist das ganze äußerst unbefriedigend, ich hoffe ihr habt mir einen Tipp woran das liegen kann.

Viele Grüße,
Clemens

--
Code:

function loop_plot

    plot_figure = figure('Visible','on');
    plot_axis = axes('Parent',plot_figure);
    x = 1:0.1:10;
    counter = 1;
   
    while isvalid(plot_figure)
        if (mod(counter,100000)==0)
            % pause(0.01);
            disp('should be plottet now');
            plot(x,sin(x-counter/10),'Parent',plot_axis);
        end
        counter = counter+1;
    end

end
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2017, 19:08     Titel:
  Antworten mit Zitat      
Hallo,

drawnow
da einfügen, wo die Graphik aktualisiert werden soll - üblicherweise nach dem Plot.

Zitat:
deshalb scheint es mir fast so als ob Matlab die Ausführung irgendwie zu doof ist und es einfach überspringt, außer es hat die Zeit dazu...

Genau genommen sind es Performance-Gründe, weil das ständige Aktualisieren von Graphiken die Code-Ausführung stark verlangsamen kann.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 08.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2017, 19:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke, funktioniert.
Funktioniert drawnow auch mit Strings von uicontrols?

Zitat:

Zitat:
deshalb scheint es mir fast so als ob Matlab die Ausführung irgendwie zu doof ist und es einfach überspringt, außer es hat die Zeit dazu...

Genau genommen sind es Performance-Gründe, weil das ständige Aktualisieren von Graphiken die Code-Ausführung stark verlangsamen kann.


Dann ist der Entwickler eben selbst schuld und sollte nur jedes n-te mal aktualisieren? Dass Matlab dann einfach Befehle ignoriert statt sie eben langsam auszuführen finde ich immernoch sehr merkwürdig.

Viele Grüße,
Clemens
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2017, 19:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Funktioniert drawnow auch mit Strings von uicontrols?

Ich verstehe nicht, was "Strings von uicontrols" sein sollen, aber würde raten es zu versuchen. Bei drawnow werden alle Graphikobjekte aktualisiert.

Zitat:
Dann ist der Entwickler eben selbst schuld und sollte nur jedes n-te mal aktualisieren?

Und wenn jemand gerne eine flüssigere Animation hätte?

Zitat:
Dass Matlab dann einfach Befehle ignoriert statt sie eben langsam auszuführen finde ich immernoch sehr merkwürdig.

Deine Meinung steht dir natürlich frei. Ich finde es einen genialen Geniestreich.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 08.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2017, 20:02     Titel:
  Antworten mit Zitat      
Hallo Harald,

keine Ironie: Danke für die nüchternen Antworten, selten so erlebt.

Zitat:
Ich finde es einen genialen Geniestreich.


Scheinbar habe ich dann den Trick noch nicht verstanden: Was ist dann der Sinn dahinter? Was bringt mir ein Programm, das zwar ausgeführt wird aber nichts anzeigt? Einen Geniestreich fände ich es, wenn Matlab genau so viele Befehle auslässt, dass die Aktualisierung der Plots bei 10 Hz landet, 1000 Hz bringt ja niemandem etwas.

Aber in der Tatsache dass Matlab mir überhaupt nichts anzeigt sehe ich keinen Sinn.

Viele Grüße,
Clemens
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2017, 22:24     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Was ist dann der Sinn dahinter?

Dass die Laufzeit so kurz wie möglich ist.

Zitat:
Was bringt mir ein Programm, das zwar ausgeführt wird aber nichts anzeigt?

Es wird ja was angezeigt, aber erst am Ende. Wenn du zwischenzeitlich eine Anzeige haben möchtest, brauchst du nur einen drawnow -Befehl einzufügen. Wenn dir dadurch das Programm zu sehr ausgebremst wird, aktualisierst du halt weniger oft - volle Kontrolle für den Anwender.

Zitat:
Einen Geniestreich fände ich es, wenn Matlab genau so viele Befehle auslässt, dass die Aktualisierung der Plots bei 10 Hz landet, 1000 Hz bringt ja niemandem etwas.

Andere sagen vielleicht 50 Hz, anderen reicht wohl, wenn sie nur sehen, dass sich noch was rührt - alles Ansichtssache. drawnow gibt dir die volle Kontrolle darüber.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 08.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2017, 22:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

die große Bedeutung von drawnow war mir nicht bewusst.

Zitat:
volle Kontrolle für den Anwender


Macht dann natürlich Sinn.

Danke Smile
Clemens
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.