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

Automatische Matching

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 13:57     Titel: Automatische Matching
  Antworten mit Zitat      
A = [-38 -30 -30 -30 -30 -30 -15 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 40];
n = length(A);

R1 = (A < -30 | A > 30);

Ich möchte die gematchten Werte von R1 automatisch festhalten:

Position X mit mit dem Wert Z
Wie mach ich es am besten?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2013, 14:16     Titel:
  Antworten mit Zitat      
Hallo,

meine Vermutung:
Code:
[find(R1); A(R1)]


Falls es das nicht ist, bitte nochmal genauer sagen, was du möchtest. Insbesondere: was ist X, was ist Z in Bezug auf die zuvor genannten Variablen?

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 15:23     Titel:
  Antworten mit Zitat      
Bei dem konkreten fall wäre es halt.
Position 1 mit -30
Position 21 mit +40

Das passt schon, ich probiere das mal aus.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 21:52     Titel:
  Antworten mit Zitat      
Wollte die Daten noch abspeichern, nur leider hat es nicht funktioniert


Code:
A = [-38 -30 -30 -30 -30 -30 -15 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 40];
n = length(A);

data = (A < -30 | A > 30);

A = [find(data); A(data)];

fileID = fopen('exp.txt','w');
fprintf(fileID,'%s',A);
fclose(fileID);
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2013, 22:12     Titel:
  Antworten mit Zitat      
Hallo,

%s ist für Strings. Numerische Werte kannst du z.B. so schreiben:

Code:
fprintf(fileID,'%d \t%f \n',A);


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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2013, 22:40     Titel:
  Antworten mit Zitat      
Eine weitere Frage hätte ich trotzdem noch
und zwar beispielsweise habe ich ein Wert gefunden das oberhalb der Schranke liegt.

Ich würde jetzt den Mittelwert bis zu dem Ausreisser rechnen und den Aussreiser durch den kalkulierten mittleren Wert überschreiben?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2013, 23:31     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe leider nicht, was du meinst.
Zudem scheint es eine Beschreibung dessen zu sein, was du tust. Wo ist dann die Frage?

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2013, 15:11     Titel:
  Antworten mit Zitat      
Folgendes beispiel soll es klar stellen?

Mal angenommen: ich habe folgendes Array
A = [-30 -30 -30 -30 -30 -30 -38 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 40];

und Folgenden Filter:
data = (A < -35 | A > 35);

Da möchte ich die Ausreisser mit NaN ersetzen:
A = [-30 -30 -30 -30 -30 -30 NaN 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 NaN];

anschließend, möchte ich die NaN werte mit dem Mittelwert bis ersetzen?
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 22.03.2013, 16:17     Titel:
  Antworten mit Zitat      
Hallo,

das hier sollte dir helfen:
Code:

A = [-30 -30 -30 -30 -30 -30 NaN 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 NaN];
idxnan = find(isnan(A));
for i = idxnan
    A(i) = mean(A(1:i-1));
end
 


Das liefert bei mir:
Code:


A =

  Columns 1 through 16

  -30.0000  -30.0000  -30.0000  -30.0000  -30.0000  -30.0000  -30.0000         0    1.0000    2.0000    3.0000    4.5000    4.5000    4.5000    4.5000    4.5000

  Columns 17 through 21

    3.0000    2.0000   10.0000    5.0000   -8.0750


Beste Grüße,
Nras

Edit: Du startest ja gar nicht mit NaNs. Dann brauchst du auch gar keine NaNs sondern kannst direkt die Werte dort ersetzen:


Code:
A = [-30 -30 -30 -30 -30 -30 -38 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 40];
idx = find(A<-35 | A>35);
for i = idx
    A(i) = mean(A(1:i-1));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2013, 20:18     Titel:
  Antworten mit Zitat      
Wie könnte ich jetzt, den überschrieben wert auch in der erstellten datei festhalten

Code:
fprintf(fileID,'%d \t%f \n',A);
 
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.03.2013, 00:11     Titel:
  Antworten mit Zitat      
Hallo,

indem du die Matrix erst so anpasst, dass sie die gewünschten Werte enthält, und dann die Textdatei schreibst.

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2013, 01:23     Titel:
  Antworten mit Zitat      
habs probiert, vor der Schleife und nach der Schleife einzusetzen, ohne Erfolgr

Code:
A = [find(idx); A(idx); A(find(idx))];
 
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.03.2013, 20:08     Titel:
  Antworten mit Zitat      
Hallo,

hat dir der Vorschlag von Nras geholfen? Wenn das nicht das gewünschte macht, wo liegt das Problem?

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2013, 14:49     Titel:
  Antworten mit Zitat      
japp, es hat mir weiter geholfen. DU meintest ich sol die Matrix mir zurecht aufstellen. Nur leider kann ich nicht den berechneten Wert in die Matrix einlegen.
Damit bekomme ich ja die Position und den Wert, doch wie könnte ich jetzt den neuen Wert noch zusätzlich einbauen.

Code:
[find(R1); A(R1)]
 
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 24.03.2013, 15:51     Titel:
  Antworten mit Zitat      
Hallo,

von welcher Schleife redest du? Nachdem du Werte in A durch die Mittelwerte bis zu den entsprechenden Stellen ausgetauscht hast, musst du nur noch mal die Datei exp.txt öffnen und die Werte reinschreiben. Den Befehl dazu hat Harald dir bereits verraten.

Ich weiß nicht genau, wo nun das Problem liegt. Ist das das, was du meinst?
Code:

A = [-30 -30 -30 -30 -30 -30 -38 0 1 2 3 4.5 4.5 4.5 4.5 4.5 3 2 10 5 40];
idx = find(A<-35 | A>35);
for i = idx
    A(i) = mean(A(1:i-1));
end

fileID = fopen('exp.txt','w');
fprintf(fileID,'%d \t%f \n',A);
fclose(fileID);
 


Viele Grüße,
Nras
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.