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

For Schleife unterschiedliche Rechenzeit

 

Piddy4
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 13.01.2016, 12:06     Titel: For Schleife unterschiedliche Rechenzeit
  Antworten mit Zitat      
Hallo Leute,
Ich haBe R2015a eine Art "Reaktionstest" geschrieben.


Code:

%Beispiel
For m=1:50
...
If m== 20
 t0= clock
End
...
If m==30
 t1=clock
 Dauer=etime(t1,t0)
End
...
End
 


Mein Problem ist nun, dass wenn ich das identische Programm mehrmals nacheinander laufen lasse, unterschiedliche Zeiten zwischen t0 und t1 erhalte.
Zwar sind die Unterschiede nur Zehntel Sekunden, bei einem Reaktionstest allerdings ist das eine erhebliche Verfälschung der Ergebnisse.
Während der Rechnungen ist noch Rechenlapazität offen (CPU-Auslastung < 70%).
Weis jemand, wodurch die unterschiedlichen Rechenzeiten zustande kommen?

Viel Dank schonmal
Piddy4
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.01.2016, 12:10     Titel:
  Antworten mit Zitat      
jita; sachen die windows im hintergrund noch so macht; giebt da viele möglichkeiten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Piddy4
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 13.01.2016, 17:11     Titel:
  Antworten mit Zitat      
OK. Und was kann ich dagegen tun, bzw. welche Alternativen habe ich um in MATLAB einen Reaktionstest zu erstellen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.01.2016, 17:30     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit: wiederholt laufen lassen und die Zeiten mitteln.
Siehe auch timeit .

Wessen Reaktion soll denn überhaupt getestet werden? Die von MATLAB? Die des Nutzers?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 13.01.2016, 17:51     Titel:
  Antworten mit Zitat      
Die Reaktion des Nutzers soll ermittelt werden.
Das Problem bei den gemittelten Werten ist die Streuung, sodass der Nutzer laut gemittelter Zeit zu spät gedrückt hat, obwohl er in diesem spezifischen Versuch noch im Tolleranzbereich war.
Zur Erklärung: Zwischen der ersten und zweiten if-Bedingung im Beispiel muss der Nutzer einen Pushbutton drücken.
Ich kann mir nur schwer vorstellen, dass aufgrund von Windowshintergrundtätigkeiten die Schleifenrechnung in MATLAB länger dauert, obwohl noch viel Rechenleistung des Computers ungenutzt ist.

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.01.2016, 21:25     Titel:
  Antworten mit Zitat      
Hallo,

neben diesem Effekt tritt auch noch der auf, dass der Code beim ersten Durchlauf in den Speicher geladen werden muss, beim zweiten Durchlauf aber schon im Speicher ist. Ich würde also zumindest mal einen "Leerdurchlauf" machen.
Wie lange ist denn die Gesamtlaufzeit des Codes? Bei 0,1s kommt mir 0,1s mehr oder weniger relativ viel vor, bei 10s fände ich das ganz normal.

Zitat:

Ich kann mir nur schwer vorstellen, dass aufgrund von Windowshintergrundtätigkeiten die Schleifenrechnung in MATLAB länger dauert, obwohl noch viel Rechenleistung des Computers ungenutzt ist.

Das Betriebssystem muss ja die Rechenleistung auch erst wieder dem anderen Prozess zuordnen. Auch das dauert.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 13.01.2016, 21:41     Titel:
  Antworten mit Zitat      
Der gesamte Code dauert so 25-30s.
Es sind insgesamt 450 Durchläufe der Schleife. Zwischen dem 100. und 150. Durchlauf finden die Aktionen statt.
Was genau meinst du mit "Leerdurchlauf"?
Ich habe heute noch ein paar Tests gemacht und dabei war sogar einmal der erste Durchlauf schneller als der zweite.
Danke für deine Hilfe
LG Piddy4
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Was genau meinst du mit "Leerdurchlauf"?

Einen Durchlauf, der nicht für die Zeitmessung berücksichtigt wird.

Zitat:
Der gesamte Code dauert so 25-30s.
Es sind insgesamt 450 Durchläufe der Schleife. Zwischen dem 100. und 150. Durchlauf finden die Aktionen statt.

Und die Schwankungen von Zehntelsekunden sind nun auf die Laufzeit von 25-30s bezogen? Das ist nun wirklich nicht viel.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 13.01.2016, 22:26     Titel:
  Antworten mit Zitat      
Nein. Das Zehntel ist auf die Dauer vom 100. bis zum 130. Durchlauf bezogen. Diese 30 Loops dauern so 2.4 bis 2.7 Sekunden.
Das Reaktionsintervall liegt also in diesem Bereich.
Nun fällt es mir schwer zu sagen, dass der Proband 0.7s nach der ersten bzw. 2s vor der zweiten Aktion den Pushbutton betätig hat, da die Dauer nicht immer 2.7s beträgt.
Grüße Piddy4
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du kannst doch die einzelnen Zeiten getrennt stoppen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 13.01.2016, 22:56     Titel:
  Antworten mit Zitat      
Ja, nur kann ich sie dann nicht wirklich miteinander vergleichen.
Angenommen zwei Probanden dücken bei dem 110. Loop den Pushbutton, so haben sie eigentlich das gleiche Ergebnis, aber unterschiedliche Zeiten.
Danke
Lg piddy4
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 14.01.2016, 10:12     Titel:
  Antworten mit Zitat      
Piddy4 hat Folgendes geschrieben:
Ja, nur kann ich sie dann nicht wirklich miteinander vergleichen.
Angenommen zwei Probanden dücken bei dem 110. Loop den Pushbutton, so haben sie eigentlich das gleiche Ergebnis, aber unterschiedliche Zeiten.
Danke
Lg piddy4


Dann speicher doch nicht die Zeit, sondern (zusätzlich) den aktuellen Schleifenzähler und vergleiche diesen Quantitativ?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Piddy4
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 03.12.15
Wohnort: ---
Version: R2015a
     Beitrag Verfasst am: 14.01.2016, 10:54     Titel:
  Antworten mit Zitat      
Danke, das wäre auch meine letzte Möglichkeit.
Ich habe gehofft, dass jemand ähnliche Probleme hatte und diese beseitigen konnte (wie z.B die Unterbindung sämtlicher Hintergrundaktivitäten oder einer anderen Schleifenmöglichkeit)
P.S. Ich habe auch schon einen While Loop versucht und dieser hat ähnliche Abweichungen.
Danke für eure Hilfe!
LG Piddy4
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
wie z.B die Unterbindung sämtlicher Hintergrundaktivitäten

Wenn es dir gelingen sollte, das auf Windows zu schaffen, sag bitte Bescheid :D

Grüße,
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.