goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:

Das Abenteuer modellbasierter Softwareentwicklung

Fachkräfte:
Testingenieur (w/m) Testframework für Simulink-basierte Echtzeitanwendungen
Pflege des MATLAB/Simulink-Testframeworks, Spezifizieren von Testkriterien, Testfällen und Testszenarien
dSPACE GmbH - Paderborn

Softwareentwickler MATLAB/Simulink (w/m)
Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLink
dSPACE GmbH - Paderborn

Testingenieur (w/m) Konfigurationswerkzeuge für Echtzeitsysteme
Einbinden von Simulink®-Simulationsmodellen, Verteilung der Simulationsmodelle auf Multicore- und Multiprozessorsysteme
dSPACE GmbH - Paderborn

Techniker/in als Systemspezialist für Test- und Absicherungsmanagement (Motor-Prototypen)
Planung und Optimierung von Prototypentests und Robustheitsanalysen
ESG Elektroniksystem- und Logistik-GmbH - München

Senior Software-Entwickler (m/w)
Implementierung von modellbasierten Softwareentwicklungen
MBtech Group GmbH & Co. KGaA - München

weitere Angebote

Partner:




Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zeilen in Bereiche gliedern

 

keinbuck
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2012, 00:00     Titel: Zeilen in Bereiche gliedern
  Antworten mit Zitat      
Hallo zusammen,
ich habe ein Skript geschrieben, das mir Zeilen einer Zeitreihe ausgibt, wenn diese fehlerhaft sind. Da dies viele Zeilen sind, möchte ich Bereiche zusammenfassen, wenn zum Beispiel der Abstand Zweier oder mehrerer Fehler weniger als beispielsweise 5 Zeilen sind. Quasi eine anfangszeile, in welcher der fehlerhafte Bereich beginnt und die Zeile, in welcher der Bereich beendet ist. So kann man auch kontinuierliche Fehler finden.
Hat jemand eine Lösung?
Grüße!


rainer87
Forum-Anfänger
Forum-Anfänger

Beiträge: 30
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2012, 23:55     Titel:
  Antworten mit Zitat      
ich weiß nicht wie es mit anderen aussieht, aber ich verstehe leider nicht was du genau meinst.
ein beispiel code bzw datensatz und das was du dann genau haben möchtest würde es mir erleichtern dein problem zu verstehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter
Supporter


Beiträge: 2606
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2007b, R2009b
     Beitrag Verfasst am: 29.01.2012, 10:59     Titel:
  Antworten mit Zitat      
Hallo

ich vermute du hast die Indizes der fehlehaften Zeilen, also du kannst z.B mit DIFF den Abstand zwischen den Zeilen berechnen
Private Nachricht senden Benutzer-Profile anzeigen
 
Keinbuck
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2012, 10:40     Titel:
  Antworten mit Zitat      
Hallo,

ich versuche mal das genauer zu beschreiben.
Mit DIFF habe ich eine Lösung, sie aber recht umständlich und mit IF und FOR Schleifen funktioniert, da mir ja ein Wert dabei verloren geht.
Hier mal ein beispielhaftes Ergebnis:
Ich habe einen Vektor
Code:
Fehlerzeilen = [1; 2; 3; 10; 11; 12; 20; 30; 32; 35]

Als Ergebnis mit einem Grenzwert, ab dem Bereiche zusammengefasst werden sollen von 5, möchte ich folgende oder ähnliche Ausgabe haben:
Code:
Bereiche = [1 3; 10 12; 20 20; 30 35]


Damit hätte ich meine Fehler von 10 auf 4 Bereiche verkleinert und das kontrollieren wäre deutlich leichter.

Liebe Grüße
 
Jan S
Moderator
Moderator

Beiträge: 3887
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 6.5, 2009a
     Beitrag Verfasst am: 30.01.2012, 12:36     Titel:
  Antworten mit Zitat      
Hallo Keinbuck,

Code:
Fehlerzeilen = [1; 2; 3; 10; 11; 12; 20; 30; 32; 35];
n = numel(Fehlerzeilen);
Bereiche = zeros(n, 2);

width = 5;
ind = 1;

Bereiche(ind, 1) = Fehlerzeile(1);
limit = Fehlerzeile(1) + width - 1;

for i = 1:n
  v = Fehlerzeile(i);
  if v <= limit
    a = v;
  else
    Bereiche(ind, 2) = a;
   
    ind = ind + 1;
    Bereiche(ind, 2) = v;
    limit = v + width - 1;
  end
end
Bereiche(ind, 2) = max(a, Fehlerzeile(n));

Bitte ausgoebig testen. Ich habe gerade kein Matlab zur Hand.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter
Supporter


Beiträge: 2606
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2007b, R2009b
     Beitrag Verfasst am: 30.01.2012, 13:05     Titel:
  Antworten mit Zitat      
Code:

Fehlerzeilen    = [1; 2; 3; 10; 11; 12; 20; 30; 32; 35; 40; 60; 90]
width              = 5;
d                   = diff([0;Fehlerzeilen])
bereichpos     = cumsum(d>=width)+1
Bereiche = arrayfun(@(x)[min(Fehlerzeilen(bereichpos==x)),max(Fehlerzeilen(bereichpos==x))],unique(bereichpos),'UniformOutput',false)
Bereiche=vertcat(Bereiche{:})
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Keinbuck
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2012, 19:07     Titel:
  Antworten mit Zitat      
Herzlichen Dank!
Das hat mir sehr geholfen!

Gruß Keinbuck
 
Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.