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

Argumente zählen und anhand der Anzahl verarbeiten

 

proth95
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2018, 17:31     Titel: Argumente zählen und anhand der Anzahl verarbeiten
  Antworten mit Zitat      
Hallo,
ich stehe in Matlab vor einem Problem. Ich hab eine Matrix von Messwerten. In einigen Spalten befinden sich Zustände in der sich die Maschine befinden kann immer in Form von 0= Aus und 1= An. Ich suche nun eine Möglichkeit diese Zustandsspalten zu durchsuchen und die 1er zu zählen, immer wenn nicht mehr als 1500 einser hintereinander kommen möchte ich diese Zeilen (bis zu 1499) löschen.

Leider sind meine Programmierkenntnisse in Matlab noch sehr beschränkt, daher die Frage. Zur Frage ist noch zu sagen es handelt sich nicht um eine Hausaufgabe meiner Uni.

Mein bisheriger Lösungsansatz ging über den find Befehl allerdings verliere ich so eine exakte zuordnung der Messwerte zu meinem Original Zeitmitschrieb.

Vom Prinzip her bräuchte ich eine Funktion die die Spalten zeilenweise durchgeht gleiche Argumente zählt und sobald das Argument wechselt also von 0 auf 1 oder umgkehrt wieder von Vorne beginnt zu zählen und falls die bisher gezählten Argumente weniger als 1499 die betreffenden Zeilen löscht.

Danke für eure Antworten und Lösungsideen

Gruß
Peter
Private Nachricht senden Benutzer-Profile anzeigen


proth95
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2018, 22:46     Titel:
  Antworten mit Zitat      
Ich habe leider keinen editieren Button gefunden um meinen Versuche der Umsetzung zu ergänzen.
DATA ist meine Matrix in Spalte 9 soll nach den 1en gesucht werden und wenn 1499 oder eniger aufeinander folgende gefunden wurden soll in Spalte 220 eine 1 in alle betreffenden Zellen geschrieben werden. Dies funnkioniert leider nicht wie erhofft.

Code:
o=0
for l=1:length(DATA(:,9))
    if DATA(l,9)==1
     o=o+1;
 
    elseif DATA(l,9) == 0
     if o<1500
        %In Spalte 220 eine 1 schrieben für die vergangenen 1499 Werte
     DATA((l-o),l,220)=1;

     elseif o>1500
    o=0;
end
end
end


Für Tips bin ich dankbar!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.10.2018, 11:07     Titel:
  Antworten mit Zitat      
hallo proth95,

"length(DATA(:,9))" erzeugt zuerst den Vektor DATA(:,9), nur um die Länge zu bestimmen und ihn dann wieder zu löschen. Effizienter: "size(DATA, 1)".

Zitat:
DATA ist meine Matrix in Spalte 9 soll nach den 1en gesucht werden und wenn 1499 oder eniger aufeinander folgende gefunden wurden soll in Spalte 220 eine 1 in alle betreffenden Zellen geschrieben werden.

Das verstehe ich noch nicht.
Das Abzählen gleicher aufeinanderfolgender Werte ist ein Run-Length-Problem. Siehe dazu https://www.mathworks.com/matlabcen.....eexchange/41813-runlength. Falls Du keinen C-Compiler installiert hast, nimm "RunLength_M" statt "RunLength" aus diesem Download. Dann:
Code:
[B, N, Index] = RunLength(DATA(:, 9));
Index(N >= 1500)

Das sind z.B. die Indices, bei denen ein Lauf von mindestens 1500 gleichen Werten beginnt. Hilft das bereits weiter?

Gruß, Jan
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.