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

Vektoren vergleichen

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.02.2017, 12:56     Titel: Vektoren vergleichen
  Antworten mit Zitat      
Liebe Leute,

ich möchte meine Messwerte gern auf Plausibilität prüfen. Manchmal setzt der Sensor nämlich aus. Mein Beispiel:

Code:

messwerte = [2 4 7 8 12; 4 6 8 NaN 15; 11 13 17 20 21];
 


Die Stelle lasse ich mittels

Code:

[row, col] = find(isnan(messwerte));
 


finden und durch

Code:

    if row < length(messwerte) && row > 1
    messwerte(row,col) = interp1([1 2], [messwerte(row-1,col) messwerte(row+1,col)], 1.5);
    end
 


linear interpoliert korrigieren. Funktioniert super. Nun habe ich aber zwei Probleme

1. Wie schaffe ich es zu extrapolieren, wenn das "NaN" am Rand der Messwerte-Matrix liegt. Dort gibt es ja dann entweder keinen Vorgänger oder keinen Nachfolger, also z. B.
Code:

messwerte = [2 4 7 8 12; 4 6 8 13 NaN; 11 13 17 20 21];
 


2. Wie gelingt es mir bei Vorhandensein von mehreren(!) "NaN"-Elementen diese separat auf dieselbe Weise zu korrigieren. Also z. B.

Code:

messwerte = [2 4 7 8 12; 4 NaN 8 NaN 14; 11 13 17 20 21];
 


Versuche ich das mit meiner bisherigen Vergleichs-Variante, wird folgende Meldung ausgegeben:

Zitat:

Operands to the || and && operators must be convertible to logical scalar values.


Nun müsste ich die entstandenen Vektoren ja elementweise vergleichen. Könnt ihr mir helfen?

Beste Grüße
pfeili
Private Nachricht senden Benutzer-Profile anzeigen


pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.02.2017, 13:08     Titel:
  Antworten mit Zitat      
Sorry für die zweite Frage. Diese kann ich erstmal so lösen (auch wenn es sicher noch schnellere Varianten gibt):

Code:

for i = 1:length(row)
    if row(i) < length(messwerte) && row(i) > 1
    messwerte(row(i),col(i)) = interp1([1 2], [messwerte(row(i)-1,col(i)) messwerte(row(i)+1,col(i))], 1.5)
    end
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.02.2017, 13:18     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es so versuchen:
Code:
for row = 1:size(messwerte, 1)
    invalid = isnan(messwerte(row, :));
    messwerte(row, invalid) = interp1(find(~invalid), messwerte(row, ~invalid), find(invalid), 'linear', 'extrap');
end


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

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.02.2017, 14:33     Titel:
  Antworten mit Zitat      
Lieber Harald,

funktioniert super. Ganz herzlichen Dank.

Beste Grüße
pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Themenstarter

Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.02.2017, 14:51     Titel:
  Antworten mit Zitat      
Habe es mir nur noch mal umgedreht, da die Interpolation zunächst nur innerhalb der Spalten, nicht innerhalb der Zeilen geschehen soll. Schaust du bitte nochmal drauf, ob das so ok ist?

Code:

for col = 1:size(messwerte, 2)
    invalid = isnan(messwerte(:,col))
    messwerte(invalid, col) = interp1(find(~invalid), messwerte(~invalid, col), find(invalid), 'linear', 'extrap')

end
 


Habe es nachgerechnet und es scheint zu klappen.
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.02.2017, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

sieht gut aus.

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.