Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Anfangs- und Endwerte aus Matrix auslesen

 

Karle
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 02.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2019, 23:24     Titel: Anfangs- und Endwerte aus Matrix auslesen
  Antworten mit Zitat      
Guten Abend wertes Forum,

zuallererst möchte ich sagen dass ich was Matlab angeht noch sehr grün hinter den Ohren bin und mir gerade versuche den Umgang damit selbst beizubringen.
Trotz langer Recherche habe ich bis lang so gar keinen Ansatz gefunden welcher zur Lösung meines Anliegens führen könnte.

von daher wende ich mich an euch.

ich stehe vor folgendem Problem:

ich habe 2 Matrizen, eine (Name: a, ~70000x5) mit "Rohdaten" wie zum Beispiel Bremsdrücken Motordrehzahlen und eingelegtem Gang aus der ich eine weitere Matrix (Name:speed, ~70000x1) mit den zugehörigen Geschwindigkeiten mit Matlab erstelle.

Ich suche nun nach einem Weg wie ich Matrix a nach definierten Werten durchsuchen kann, z.B. bremsdruck vorne > 5 && bremsdruck hinten > 5.
Sollten beide Bedingungen wahr sein, sollte mir der zugehörige Anfangswert aus Matrix speed (also der erste Wert für den die Bedingungen wahr sind) und der zugehörige Endwert (also der letzte Wert aus Matrix speed bevor eine oder beide Bedingungen unwahr werden) in eine neue Matrix schreiben (Am praktischsten wäre es wenn Anfangs- und Endwert jeweils untereinander stehen würden und jede neue Paarung in eine neue Spalte geschrieben würden).
Die Bedingungen werden definitiv mehrmals zwischen wahr und unwahr umschalten.

Mein Ziel ist mit den Anfangs- und Endwerten die Änderung der kintetischen Energie zu berechnen.



Mein Code sieht momentan so aus:
Code:
pbrake_f_a = a (:,4);
pbrake_r_a = a (:,5);
v = speed (:,1);
counter = 0;
temp = 0;
speed1 = zeros(2,length(a));
for i=1:length(speed1)
    if pbrake_f_a(i) > 5 && pbrake_r_a(i) > 5 && v(i) > 0 && temp < 1
       
     counter = counter+1;
     position(1, counter) = i;
     speed1(1, counter) = speed(i);
     temp = 1;
     
    elseif temp > 0
       
     position(2, counter) =i;
     speed1(2, counter) = speed(i-1);
     temp = 0;
    end
  speed1 = speed(position);
end


Ich habe es zumindest geschafft das er mir die Geschwindigkeiten in einer 2x 2417 Matrix ausgibt, allerdings sind das immer aufeinanderfolgende Werte.

Ich hoffe ich konnte euch mein Problem halbwegs verständlich schildern und bin für jeden Hinweis/Tipp dankbar.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 10.915
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.06.2019, 11:25     Titel: Re: Anfangs- und Endwerte aus Matrix auslesen
  Antworten mit Zitat      
Hallo Karle,

Zitat:
z.B. bremsdruck vorne > 5 && bremsdruck hinten > 5.
Sollten beide Bedingungen wahr sein, sollte mir der zugehörige Anfangswert aus Matrix speed (also der erste Wert für den die Bedingungen wahr sind) und der zugehörige Endwert (also der letzte Wert aus Matrix speed bevor eine oder beide Bedingungen unwahr werden)

Code:
a = rand(70000, 5);   % Test data
speed = rand(70000, 1);
match = (a(:, 4) > 5 && a(:,5) > 5);
index1 = find(match, 1, 'first');
index2 = find(match, 1, 'last');
speed(index1)
speed(index2)

Das verstehe ich nicht:
Zitat:
Am praktischsten wäre es wenn Anfangs- und Endwert jeweils untereinander stehen würden und jede neue Paarung in eine neue Spalte geschrieben würden


Zitat:
Die Bedingungen werden definitiv mehrmals zwischen wahr und unwahr umschalten.

Hm. Vielleicht könnte man die Frage vereinfachen: Wenn du gleich hiermit beginnst:
Code:
match = (a(:, 4) > 5 && a(:,5) > 5);

Nun möchtest du die Indices finden, in denen der Wert von 0 auf 1 wechselt, und dann wieder von 1 auf 0 - richtig?
Code:
ini = strfind(match, [false, true]);
fin = strfind(match, [true, false]) + 1;

Nun muss man noch bedenken was geschieht, wenn das erste bzw. letzte Element von "match" true oder false ist. Eventuell einfach
match = [false, match, false] einsetzen zur Sicherheit. Dann muss man noch die Indices um 1 verkleinern, da man die Werte ja verschoben hat.

Probiere es mal damit.

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
.


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


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


Copyright © 2007 - 2019 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.