Verfasst am: 17.06.2019, 22:24
Titel: Anfangs- und Endwerte aus Matrix auslesen
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
Verfasst am: 19.06.2019, 10:25
Titel: Re: Anfangs- und Endwerte aus Matrix auslesen
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)
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.
als erstes möchte ich mir bei dir Jan entschuldigen, trotz deiner raschen Antwort hab ich mich monatelang nicht gemeldet, dies hat persönliche Gründe auf die ich nicht näher eingehen möchte, trotzdem war es nicht gerade die feine englsiche Art einfach sang- und klanglos zu verschwinden.
Nun zu deinem Code, leider hat er mir bei meinem Problem nicht wirklich weiter geholfen, was aber vermutlich an meiner doch recht speziellen Aufgabenstellung lag.
Dank eines Kommilitonen bin ich nun aber doch an eine brauchbare Lösung gekommen die ich euch nicht vorenthalten will.
Code:
% der Druck ab dem ein Bremsvorgang erkannt wird
p_v = 5.5; %vorne
p_h = 5.5; %hinten
min_l = 4; %minimale Länge des Bremsvorgangs (Filter)
temp = 0;
Bremsvorgang_counter = 0;
for i = 1 : length(pbrake_f_abar) if pbrake_f_abar(i) > p_v && pbrake_r_abar(i) > p_h && vwheel_flkmh (i) > 0 && temp == 0
Bremsvorgang_counter = Bremsvorgang_counter + 1;
grenzen_temp(Bremsvorgang_counter, 1) = i;
temp = 1;
end if pbrake_f_abar(i) < p_v && temp == 1
grenzen_temp(Bremsvorgang_counter, 2) = i - 1;
temp = 0;
end end
%Bereiche nach Länge filtern
index = 0;
for j = 1 : length(grenzen_temp) diff = grenzen_temp(j, 2) - grenzen_temp(j, 1);
ifdiff >= min_l
index = index + 1;
grenzen(index, :) = grenzen_temp(j, :);
end end
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
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.