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

"grid vectors not strictly monotonic increasing" b

 

MaraBelle
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 24.02.15
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 11.05.2015, 17:18     Titel: "grid vectors not strictly monotonic increasing" b
  Antworten mit Zitat      
Hallo
ich interpoliere Messdaten mit der Funktion interp1. Und bekomme folgende Fehlermeldung:

Error using griddedInterpolant
The grid vectors are not strictly monotonic increasing.

Error in interp1 (line 186)
F = griddedInterpolant(X,V,method);

Error in WEP (line 33)
tname= interp1(daten{1,1},daten{1,4},x,'spline'); %bei 'linear' (=default) wird nicht extrapoliert!!

Mein Code sieht so aus:

Code:
     file3=fullfile(Inputpath, sname) ;
        %Header: time [s]   Timestamp   DeviceId   RT1 [°C]   RF1 [%]
        fid=fopen(file3);
        daten=textscan(fid,'%f  %f  %s  %f  %f','HeaderLines',1,'Delimiter','\t','MultipleDelimsAsOne',1);
        fclose(fid);

            tname= interp1(daten{1,1},daten{1,4},x,'spline');   %bei 'linear' (=default) wird nicht extrapoliert!!
            fname= interp1(daten{1,1},daten{1,5},x,'spline');   %bei 'linear' (=default) wird nicht extrapoliert!!
            Unix_neu3=interp1(daten{1,1},daten{1,2},x,'spline');
            DeviceID3=daten{1,3};
            DeviceID3=cellstr(DeviceID3(1,1));
 


Das Originalfile ist angehängt. Ich habe jetzt schon herausgefunden, dass in Zeile 1158 und 1159 des Originalfiles zweimal der gleiche Zeitstempel vorhanden ist. Kann ich für diesen (sehr seltenen) Fall eine Sicherung einbauen, durch die die doppelte Zeile gelöscht wird?
Wenn ja, an welcher Stelle? Vor dem Interpolieren, oder?
Ich habe bisher schon sehr viele Daten ausgewertet und das ist jetzt zum ersten Mal der Fall. Und ich möchte nicht jede Datei vorher auf doppelte Zeilen überprüfen, das ganze soll eigentlich automatisiert ablaufen.
Hat jemand eine Idee, wie ich das Problem lösen könnte?

WEP-Kinderzimmer.txt
 Beschreibung:

Download
 Dateiname:  WEP-Kinderzimmer.txt
 Dateigröße:  74.46 KB
 Heruntergeladen:  502 mal
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: 11.05.2015, 17:51     Titel:
  Antworten mit Zitat      
Zitat:
Das Originalfile ist angehängt. Ich habe jetzt schon herausgefunden, dass in Zeile 1158 und 1159 des Originalfiles zweimal der gleiche Zeitstempel vorhanden ist. Kann ich für diesen (sehr seltenen) Fall eine Sicherung einbauen, durch die die doppelte Zeile gelöscht wird?

Code:

grüße
_________________

richtig Fragen
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: 11.05.2015, 17:52     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Zeiten aufsteigend sind, kannst du z.B. so doppelte finden und entfernen:

Code:
x = [1 2 3 3 4 5]
doppelt = diff(x) <= 0
x(doppelt) = []


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 24.02.15
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.05.2015, 09:35     Titel:
  Antworten mit Zitat      
Super! Vielen Dank Harald und Winkow für die Tipps!

@Harald: Da auf auf doppelte Zeilen geprüft werden und nicht auf doppelte Spalten, müsste dein Code dann noch angepasst werden. Bsp.:
Code:
x=[1 5 6 2 8 9; 2 4 7 5 9 0;3 8 3 9 0 5 ;3 8 3 9 0 5 ;4 5 8 2 0 7]
doppelt = diff(x(1,:)) <= 0
x(doppelt,:) = []

x =
1 5 6 2 8 9
2 4 7 5 9 0
3 8 3 9 0 5
3 8 3 9 0 5
4 5 8 2 0 7

doppelt =
0 0 1 0 0

x =
1 5 6 2 8 9
2 4 7 5 9 0
3 8 3 9 0 5
4 5 8 2 0 7

Mit Winkows Lösung braucht man einen Schritt weniger
Code:
C = unique(x,'rows')

C =
1 5 6 2 8 9
2 4 7 5 9 0
3 8 3 9 0 5
4 5 8 2 0 7

Diese Funktion kannte ich bisher nicht.
Mit
Code:
daten= unique(daten,'rows')

funktioniert es in meinem Fall super, da bei mir auch die komplette Zeile identisch ist. Schwieriger wäre es dabei, wenn nur der Zeitstempel in der ersten Spalte gleich wäre. Da würde ich dann wieder auf Haralds Lösung (entsprechend angepasst) zurückgreifen. Diese funktioniert auch, wenn nur der Wert in der ersten Spalte identisch ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaraBelle
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 24.02.15
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.05.2015, 12:37     Titel:
  Antworten mit Zitat      
MaraBelle hat Folgendes geschrieben:

Mit
Code:
daten= unique(daten,'rows')

funktioniert es in meinem Fall super, da bei mir auch die komplette Zeile identisch ist.


Edit: Es sollte funktionieren... Hatte bei meiner Probe eine vereinfachte Matrix benutzt...
Da meine Variable "daten" ein 1x5 cell mit 4 doubles und einem cells (Spalte 3) ist, funktioniert es nicht, da, wie in der Hilfe steht:
The 'rows' option does not support cell arrays.
Einfach umwandeln in eine Matrix geht nicht, da der cell in Spalte 3 strings enthält...

Habe jetzt ein "workaraound" geschrieben, der etwas komplizierter ist, aber funktioniert:

Code:

            DeviceID3=daten{1,3};       % ID abspeichern, ist immer die gleiche
            DeviceID3=cellstr(DeviceID3(1,1));
            daten(3)=[];  % Spalte mit ID-Strings löschen
            daten=cell2mat(daten)  %In Matrix umwandeln
            daten= unique(daten,'rows');             % doppelte Zeilen löschen, funktioniert nur, wenn komplette Zeile gleich...
           % doppelt = diff(daten(:,1)) <= 0;      % doppelte Zeilen löschen, wenn nur Zeitstempel gleich...
           % daten(doppelt,Smile = [];
 


Vielleicht hilft es ja jemand, der ein ähnliches Problem hat...
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.