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

Wie addiert man 2 timestamps?

 

clustering_n00b
Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 23.11.2012, 22:55     Titel: Wie addiert man 2 timestamps?
  Antworten mit Zitat      
Hallo zusammen! Smile


Ich stecke gerade an einem timestamp Problem fest, und zwar möchte ich eine alte Zeitdifferenz zur neuen Zeit hinzuaddieren.

Dabei bekomme ich aber Matrix Dimensions-Inkompatibilitäts Fehlermeldungen.

Die Code-Struktur ist folgendermassen:

Code:

funktion_loop

time0 = clock;
...
...
führe Funktion aus
...
...
currenttime = get(handles.time, 'String')
currenttime = currenttime + etime(clock, time0)
set(handles.time, 'String', time2human(currenttime));
time0 = clock;

end
 


Jetzt scheint aber currenttime ein richtiger timestamp wie 13.2 min zu sein. etime(clock, time0) gibt aber eine dimensionslose Grösse an, wie 14.32.

Wenn ich die beiden addieren komme ich auf eine Matrix!!
Und auf eine Matrix kann man keine time2human Operation ausführen.
Daher die Fehlermeldung!


Irgendwelche Ideen, wie man das anpacken könnte?
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: 23.11.2012, 23:03     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Jetzt scheint aber currenttime ein richtiger timestamp wie 13.2 min zu sein.

So etwas wie einen "echten Timestamp" gibt es meines Wissens in MATLAB nicht, zumindest nicht standardmäßig. Meine Vermutung ist, dass die String-Eigenschaft ein Character Array ist. Was dieses bei dir nun beinhaltet, musst schon du uns sagen. Je nachdem kann man das wohl in einen Datumsvektor (mit datevec) oder ein numerisches Datum (datenum) umwandeln.


Zitat:
Und auf eine Matrix kann man keine time2human Operation ausführen.

Was ist denn "time2human"? Mein MATLAB kennt diese Funktion nicht.

Zitat:
Daher die Fehlermeldung!

Welche Fehlermeldung?

Mit diesen Informationen ist leider sehr schwer nachzuvollziehen, was du erreichen willst und wo genau das Problem dabei liegt.

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

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 23.11.2012, 23:17     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Was ist denn "time2human"? Mein MATLAB kennt diese Funktion nicht.



Ach, das ist eine vordefinierte Funktion, die sich auf einem speziellen MATLAB Portal befindet.

Sie sieht folgendermassen aus:
Code:

function str = time2human(t)
% time2human(t)
% t = seconds
% str = output

if t >= 2
  strs = {'sec', 'min', 'hr', 'days', 'weeks', 'months', 'years'};
  divs = [1, 60, 60*60, 60*60*24, 60*60*24*7, 60*60*24*30, 60*60*24*365];

  n = t ./ divs;
  idx = find(n >= 1.5, 1, 'last');
  if isempty(idx)
    idx = 1;
  end
  str = [num2str(n(idx), '%0.3f'), ' ', strs{idx}];
else
  str = [num2str(t*1000, '%0.3f'), ' ms'];
end
 
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: 23.11.2012, 23:46     Titel:
  Antworten mit Zitat      
Hallo,

bitte auch die anderen Rückfragen beantworten.

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

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 23.11.2012, 23:57     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

bitte auch die anderen Rückfragen beantworten.

Grüße,
Harald



Ich habe jetzt mal currenttime für 2 Iterationen laufen lassen, bis die Fehlermeldung kam:


Zitat:
currenttime =

0


currenttime =

49.5342


currenttime =

49.534 sec


currenttime =

Columns 1 through 7

53.8069 58.8069 47.8069 54.8069 52.8069 53.8069 33.8069

Columns 8 through 10

116.8069 102.8069 100.8069

Error using ./
Matrix dimensions must agree.

Error in time2human (line 10)
n = t ./ divs;
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: 24.11.2012, 00:27     Titel:
  Antworten mit Zitat      
Hallo,

ist der Anfangswert von currenttime denn sinnvoll? Diese "menschenlesbare Zeit" ist ja schön und gut, nur natürlich sehr mühsam wieder zurückzukonvertieren. Was spricht gegen die Verwendung von datestr?

Es sieht auf den ersten Blick so aus, als ob currenttime immer was anderes wäre, und dann ist es natürlich schwierig, damit zu arbeiten. Das Problem sehe ich da aber in der Funktion time2human bzw. deiner Anwendung davon.

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

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 24.11.2012, 00:46     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
ist der Anfangswert von currenttime denn sinnvoll? Diese "menschenlesbare Zeit" ist ja schön und gut, nur natürlich sehr mühsam wieder zurückzukonvertieren. Was spricht gegen die Verwendung von datestr?



Ja, currenttime dient momentan als Akkumulator, der die Zeit misst, die vergeht, bis die ganze Funktion (mehrmals) ausgeführt wird.

datestr gibt ja nur das Datum bzw. die Zeit an. Ich möchte aber die Zeitdifferenz berechnen.
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: 24.11.2012, 11:19     Titel:
  Antworten mit Zitat      
Hallo,

Alternativvorschlag: numerische Zeit in UserData abspeichern.
Oder die entsprechende Funktion human2time verwenden bzw. schreiben.

Code:
funktion_loop

time0 = clock;
...
...
führe Funktion aus
...
...
if isempty(get(handles.time, 'UserData'))
currenttime = 0;
else
currenttime = get(handles.time, 'UserData');
end
currenttime = currenttime + etime(clock, time0)
set(handles.time, 'UserData', currenttime);
set(handles.time, 'String', time2human(currenttime));
time0 = clock;

end


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

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 24.11.2012, 11:32     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Alternativvorschlag: numerische Zeit in UserData abspeichern.
Oder die entsprechende Funktion human2time verwenden bzw. schreiben.

Code:
funktion_loop

time0 = clock;
...
...
führe Funktion aus
...
...
if isempty(get(handles.time, 'UserData'))
currenttime = 0;
else
currenttime = get(handles.time, 'UserData');
end
currenttime = currenttime + etime(clock, time0)
set(handles.time, 'UserData', currenttime);
set(handles.time, 'String', time2human(currenttime));
time0 = clock;

end


Grüße,
Harald



Und tatsächlich hat das funktioniert.
Wie hat jetzt UserData einen solchen Unterschied ausgemacht??? Shocked
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: 24.11.2012, 12:52     Titel:
  Antworten mit Zitat      
Hallo,

das UserData an sich hat nicht den Unterschied gemacht.
Das entscheidende ist, dass du in UserData weiterhin das numerische Datum speicherst (und damit weiterarbeiten kannst), während im String eben nur dieses human-Date liegt.

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

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 24.11.2012, 12:55     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

das UserData an sich hat nicht den Unterschied gemacht.
Das entscheidende ist, dass du in UserData weiterhin das numerische Datum speicherst (und damit weiterarbeiten kannst), während im String eben nur dieses human-Date liegt.

Grüße,
Harald



Ach so.
Ja, dann. Vielen Dank ein weiteres Mal, Harald! Very Happy
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.