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

differenz bestimmen

 

gast1350

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2013, 19:27     Titel: differenz bestimmen
  Antworten mit Zitat      
hey,

ich hoffe, einer von euch kann mir helfen, irgendwie komm ich einfach nicht drauf.

ich habe einen vektor, der eine zeichenkette als datum und uhrzeit enthält, in diesem format mm.dd.yy hh:mm:ss AM oder PM (07.10.13 12:44:09 AM). leider fehlen ab und zu dazwischen werte, also zB. 07.10.13 12:46:09 AM, 07.10.13 13:50:09 AM 10.11.13 14:54:09 PM.
ich möchte jetzt, meinen vektor kontrollieren, ob jede minute ein wert vorhanden ist und wenn nicht, über die lücke interpolieren.

Ich hab gelesen, dass es da den Befehl diff gibt, leider bekomme ich immer die fehlermeldung, dass es sich um zeichenketten handelt, bzw. bin ich mir nicht sicher, ob das auch bei einem vektor elementeweise funktioniert.

leider weiss ich auch nicht so recht, wie ich eine schleife bauen soll, da sich im string ja AM und PM ändert bzw. nicht nur Minuten-daten fehlen, sondern teilweise ganze tage.

ich hoff, es ist einigermaßen verständlich erklärt, irgendwie steh ich bei diesem programm voll auf der leitung.

bin für jeden tipp dankbar.

gruni


markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 15.10.2013, 20:10     Titel:
  Antworten mit Zitat      
Ich würde versuchen den Timestring in einer serial data number zu konvertieren (siehe datenum, datestr und datevec). Damit lässt sich dann wesentlich entspannter "rechnen".
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2013, 20:59     Titel:
  Antworten mit Zitat      
hallo,

danke für die schnelle antwort. leider bin ich noch immer nicht so wirklich schlau geworden.

mit dem code

Code:

date_num  = datenum(date,'mm.dd.yy HH:MM:SS PM');
 


hab ich jetzt zahlen-werte herausbekommen. was passiert mit AM und PM? kann ich das so übergeben, dass matlab es erkennt?

und wie kann ich mablab jetzt sagen, dass wenn die differenz zwischen dem nachfolgendem wert größer als 1 minute ist, dass interpoliert werden soll?

es tut mir wirklich leid, aber irgendwie komm ich einfach nicht drauf.
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 15.10.2013, 21:14     Titel:
  Antworten mit Zitat      
Vielleicht hilft dir das weiter:

Code:

>> format long g

>> str={'10.11.13 14:54:09 PM'
'10.11.13 14:55:09 PM'
'10.11.13 14:56:09 PM'
'10.11.13 14:58:09 PM'}

str =

    '10.11.13 14:54:09 PM'
    '10.11.13 14:55:09 PM'
    '10.11.13 14:56:09 PM'
    '10.11.13 14:58:09 PM'

>>
>> date_time=datenum(str)

date_time =

            735236.1209375
          735236.121631944
          735236.122326389
          735236.123715278

>> date_time(2)-date_time(1)

ans =

       0.00069444440305233

>> date_time(3)-date_time(2)

ans =

       0.00069444440305233

>> date_time(4)-date_time(3)

ans =

       0.00138888892251998

>> diff(date_time)>0.00069444440305233

ans =

     0
     0
     1


>> str={'10.11.13 14:54:09 PM'
'10.11.13 14:55:09 AM'}

str =

    '10.11.13 14:54:09 PM'
    '10.11.13 14:55:09 AM'

>>
>> date_time=datenum(str)

date_time =

            735236.1209375
          735235.621631944


 


Du untersuchst quasi durch subtrahieren wie groß eine Minute in serial data number ist (ist irgendwo mit Sicherheit dokumentiert Laughing ). Dadurch kannst du rückschließen wo irgendwo eine Minute fehlt und ggf. auch Toleranzen berücksichtigen.
Über AM und PM brauchst du dir keine Gedanken machen wie du siehst.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2013, 21:22     Titel:
  Antworten mit Zitat      
danke, das hilfe. ich hab jetzt mal eine for-schleife dazugemacht

Code:

for i = 2:length(date_num)
    difference(i) = date(i)-date(i-1);
end
 


mit dieser schleife berechne ich dann immer die difference vom jeweils nächsten element.
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 15.10.2013, 21:23     Titel:
  Antworten mit Zitat      
Ach, das Datum wird scheinbar doch nicht automatisch erkannt.
Code:

>> date_time=datenum(str)                        

date_time =

            735236.1209375
          735235.621631944

>> date_time= datenum(str{1},'mm.dd.yy HH:MM:SS PM')

date_time =

            735519.1209375

>> date_time= datenum(str{2},'mm.dd.yy HH:MM:SS AM')

date_time =

          735518.621631944
 


An der Differenz (~0.5) gegeben durch AM/PM ändert sich allerdings nichts.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 15.10.2013, 21:24     Titel:
  Antworten mit Zitat      
Anonymous hat Folgendes geschrieben:
danke, das hilfe. ich hab jetzt mal eine for-schleife dazugemacht

Code:

for i = 2:length(date_num)
    difference(i) = date(i)-date(i-1);
end
 


mit dieser schleife berechne ich dann immer die difference vom jeweils nächsten element.


diff erledigt das auch.

Code:

>> date_time=datenum(str)

date_time =

            735236.1209375
          735236.121631944
          735236.122326389
          735236.123715278

>> diff(date_time)

ans =

       0.00069444440305233
       0.00069444440305233
       0.00138888892251998
 

_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2013, 21:57     Titel:
  Antworten mit Zitat      
stimmt, mit diff ist es eleganter.

für die interpolation hab ich mir folgendes gedacht: ich starte eine abfrage, ob differ > 0.00069444440305233 ist und wenn ja, dann soll die lücke zwischen den messwerten gefüllt werden mit hilfe der interpolation. also zum bsp. hab ich am 25.10. einen messwert 10.9 aber dann erst wieder am 28.10. und diese lücke, will ich jetzt 'füllen'.

Code:

dx = 0.00069444440305233;
for i = 1:length(differ);
    if differ > dx;
    x = [differ(i) differ(i+1)]
    T_neu = [T(i) T(i+1)]
    T_dx = [differ(i):dx:differ(i+1)]
   
    T_inter = interp1(x,T_neu,x,T_dx,'linear');
    end
end

 


jetzt bin ich mir nur nicht sicher, ob in der schleife ein denkfehler drinnen ist. matlab zeigt mir zwar keine fehlermeldung an, berechnet die werte aber auch nicht.
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 16.10.2013, 19:36     Titel:
  Antworten mit Zitat      
Das ergibt für mich keinen sinn.

Code:

for i = 1:length(differ);
    if differ > dx;
...
 


Was ist differ?

Ferner wird dein T_inter jedes mal überschrieben und du würdest theoretisch nur den letzten errechnet Wert haben.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
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.