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

Zwei Datensätze mit unterschiedlichen Argumenten

 

dasjoki
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2018, 14:26     Titel: Zwei Datensätze mit unterschiedlichen Argumenten
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem. Ich habe zwei große Datensätze:

Datensatz 1: x, z
Datensatz 2: Xs, Zs

Die beiden Datensätze würde ich gern voneinander subtrahieren aber beide haben unterschiedliche Argumente (x-Werte). Für genau dieses Problem hatte ich sogar eine Lösung gefunden:

http://www.gomatlab.de/plots-vonein.....ghlight,subtrahieren.html

Ich habe das dann an meine Variablen angepasst

Code:

    X = sort([x;Xs]);           % Daten auf gemeinsames X-Raster setzen
    z_err = interp1(x, z, X);   % Messwerte auf das X-Raster anpassen
    z_cor = interp1(Xs, Zs, X); % Kreisdaten auf das X-Raster anpassen
   
    err = z_err - z_cor;
 


und es hat sogar im ersten Versuch funktioniert.

Nun habe ich exakt das gleiche Skript mit neuen Datensätzen und diesmal tritt folgender Fehler auf:

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

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

Ich verstehe nicht, wo der Fehler liegt. Könnte mir jemand bitte auf die Sprünge helfen?

Beste Grüße
dasjoki
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: 26.01.2018, 18:04     Titel:
  Antworten mit Zitat      
Hallo,

du brauchst eigentlich nur die Meldung zu übersetzen:
die Gittervektoren müssen monoton steigend sein, d.h. ein Eintrag größer als der vorherige.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2018, 11:56     Titel:
  Antworten mit Zitat      
Das sollte doch aber mit

Code:
X = sort([x;Xs]);


nicht möglich sein, oder? Die Funktion sortiert mir doch die Werte schon aufsteigend.

Ich habe inzwischen auch die unique-Funktion genutzt, um doppelte Werte zu löschen. Auch das bringt mich nicht zum Ziel...

Viele Grüße
dasjoki
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: 29.01.2018, 12:18     Titel:
  Antworten mit Zitat      
Hallo,

das X ist aufsteigend sortiert, aber nicht das x und das Xs - und darum geht es.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2018, 13:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe auch testweise mal x, z, Xs und Zs sortiert. Auch dann bekomme ich weiterhin diese Fehlermeldung. Daran scheint es also nicht zu liegen.

Hast du noch eine andere Idee? Vielleicht auch einen anderen Weg, um das Ziel zu erreichen?

Viele Grüße
dasjoki
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: 29.01.2018, 13:50     Titel:
  Antworten mit Zitat      
Hallo,

dann poste bitte mal ein reproduzierbares Beispiel.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 29.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2018, 11:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe meinen Fehler gefunden. Es lag tatsächlich an den doppelten Werte. Eigenartigerweise musste ich die unique-Funktion zwei mal ausführen, damit wirklich alle doppelten Werte gelöscht wurden.

Ich habe es aber nun so in den Griff bekommen:

Code:
%% Berechnung des Fehlers

    % x-Werte der Größe nach sortieren und z-Werte entsprechend zuordnen
    [x,I] = sort(x);
    for i = 1 : numel(z)
        z(i) = z(I(i));
    end;
       
    % doppelte x-Werte und dazugehörige z-Werte löschen
    [x, order, pos] = unique(x,'stable');
    for i = 1 : numel(x)
        z_unique(i) = z(order(i));
    end;
    z = z_unique;
   
    X = sort([x;Xs]);           % Daten auf gemeinsames X-Raster setzen
   
    z_cor = interp1(Xs, Zs, X); % Kreisdaten auf das X-Raster anpassen
    z_err = interp1(x, z, X);   % Messwerte auf das X-Raster anpassen
   
    error = z_err - z_cor;


Vielen Dank und beste Grüße
dasjoki
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.