|
|
Erhöhe fortlaufende Nummerierung, wenn Bedingung erfüllt i |
|
agent_fux |
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 12.01.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: MATLAB R2016b student use
|
|
|
|
|
|
Verfasst am: 12.01.2017, 20:20
Titel: Erhöhe fortlaufende Nummerierung, wenn Bedingung erfüllt i
|
|
Hallo zusammen,
ich habe eine Matrix B mit über 6000 Zeilen, welche eine Spalte mit fortlaufenden Sekunden beinhaltet und daneben eine Spalte mit der dazugehörigen Geschwindigkeit. Nun möchte ich Geschwindigkeit-Zeit-Aufzeichnung segmentieren in Micro-Trips. Ein Micro-Trip besteht aus Standphase v=0 und Fahrphase v>0. Diese Micro-Trips sollen fortlaufend nummeriert werden. Die Nummerierung darf sich erst erhöhen, wenn wieder die Geschwindigkeit v=0 erreicht ist. Um es besser zu veranschaulichen, wie ich es brauche, ist eine Tabelle im Anhang.
Mein Ansatz:
Leider führt das nicht zum gewünschten Ergebnis. Ich hoffe ihr könnt mir helfen.
Beste Grüße
agent_fux
Beschreibung: |
|
Download |
Dateiname: |
Micro-Trip.pdf |
Dateigröße: |
171.2 KB |
Heruntergeladen: |
364 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.432
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.01.2017, 21:03
Titel:
|
|
Hallo,
und was passiert stattdessen?
Bekommst du eine Fehlermeldung? Weichen die Ergebnisse von den gewünschten ab?
Auf Anhieb sehe ich die Fehler, dass If und For großgeschrieben sind.
Grüße,
Harald
|
|
|
agent_fux |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 12.01.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: MATLAB R2016b student use
|
|
|
|
|
|
Verfasst am: 13.01.2017, 17:07
Titel:
|
|
Hallo,
zunächst einmal hier der korrigierte Quellcode:
Nach dem Starten des Befehls landet Matlab in einer Endlosschleife und ich muss Matlab beenden, weil STRG+C im Workspace nicht funktioniert.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 13.01.2017, 23:48
Titel:
|
|
Hallo agent_fux,
Es ist klar, dass Matlab hier in einer Endlos-Schleife landet:
Und in dem "..." wird B(i,3) nicht verändert. Dann muss es ja endlos werden.
Was genau soll dieser Programm-Abschnitt tun?
Gruß, Jan
|
|
|
agent_fux |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 12.01.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: MATLAB R2016b student use
|
|
|
|
|
|
Verfasst am: 14.01.2017, 12:37
Titel:
|
|
Der Programm abschnitt soll, so lange der Wert in Zeile i, Spalte 3 >= 0 ist, den Wert n in Spalte 1 schreiben. Allerdings soll das nur so lange gemacht werden bis in i-ter Zeile der Wert in Spalte 3 >= 0 ist und in der darauffolgenden Zeile i+1 der Wert =0 ist. Danach soll n um 1 in i+1 Spalte 3 erhöht werden.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 15.01.2017, 13:00
Titel:
|
|
Hallo agent_fux,
Dann meinst Du wohl etwas wie
if
B(i,3) >= 0 und nicht
while
.
Du suchst also nach den Zeilen, in denen das Element in der 3. Spalte >= 0 ist und in der darauffolgenden Zeile == 0. Richtig? Das erste Element soll dabei 1 sein:
Und jetzt soll an diesen Indizes der Wert der ersten Spalte um jeweils 1 erhöht werden:
Das geht also auch ohne Schleife sehr effizient. Hier nochmal mit Schleife:
Um das letzte Element musst Du Dich dann noch einzeln kümmern, denn die Schleife kann ja nicht bis dort hin laufen, da B(i+1, 3) abgefragt wird.
Gruß, Jan
|
|
|
agent_fux |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 12.01.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: MATLAB R2016b student use
|
|
|
|
|
|
Verfasst am: 15.01.2017, 22:18
Titel:
|
|
Die Variante ohne Schleife funktioniert nicht so ganz wie es sein soll. Der Befehl erhöht die Nummerierung in jeder Zeile, in der B(i,3) = 0. Erst wenn B(i,3) > 0 ist, wird die Nummerierung nicht erhöht bis B(i,3) = 0.
Die Variante mit Schleife führt zum Ergebnis. Abhilfe für die letzte Zeile schafft ein Hilfsvektor, der vorübergehend für die Schleife eingefügt und danach wieder gelöscht wird.
|
|
|
agent_fux |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 12.01.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: MATLAB R2016b student use
|
|
|
|
|
|
Verfasst am: 17.01.2017, 10:07
Titel:
|
|
An dieser Stelle möchte ich mich bedanken für eure Hilfe.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 17.01.2017, 17:05
Titel:
|
|
Hallo agent_fux,
Zitat: |
Die Variante ohne Schleife funktioniert nicht so ganz wie es sein soll. |
Dann passe sie doch einfach an. Die Idee die entsprechenden Elemente auf 1 zu setzen und dann per
cumsum
die Ausgabe zu erzegen, sollte verständlich geworden sein, oder? Dann ist der Rest Feintuning.
Gruß, Jan
|
|
|
agent_fux |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 32
|
|
|
|
Anmeldedatum: 12.01.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: MATLAB R2016b student use
|
|
|
|
|
|
Verfasst am: 17.01.2017, 17:12
Titel:
|
|
Die Idee mit cumsum habe ich nicht verstanden. Ist aber auch nicht schlimm. Ich habe die Variante mit der Schleife übernommen und die funktioniert so wie ich es brauche.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|