ich bin MATLAB "Anfänger" und stehe auf dem Schlauch. Ich bringe meine Anweisung einfach nicht fertig. Ich hoffe jemand kann mir mit meiner Frage helfen.
Ich habe eine Reihe von Messwerten. In der ersten Spalte befindet sich das datum (in mathematischer MATLAB schreibweise) und in der zweiten spalte befinden sich die messwerte.
Hier ein Beispiel mit frei gewählten Zahlen:
Datum Messwert
1000, 0
1001, 1
1002, 3
1003, 1
1004, 0
1005, 0
1006, 4
1007, 0
1008, 0
1009, 0
1010, 0
1011, 1
1012, 1
1013, 2
1014, 3
1015, 1
1016, 1
1017, 0
1018, 0
1019, 0
Die Messwerte stellen Niederschlagsmessungen dar. Ich möchte nun herausfinden, wie viel Regen pro Ereignis auftritt, wie lange dieses Ereignis dauert und an welchem Datum es startet.
Meine Ziel matrix soll also sein (stimmt für die werte aus obenstehender matrix):
Summe AnzahlMesswerte Start
5, 3, 1001
4, 1, 1006
9, 6, 1011
Ich hab an eine for-schleife gedacht, die die messwerte durchläuft und realisiert wenn ein ereignis beginnt und fertig ist und dann die summe der messwerte bildet und die anzahl der messwerte des ereignisses berechnet und denn starttag. aber leider ist mir schlichtweg nicht klar wie ich das programmieren muss. oder gibt es da eine bessere lösung?
% Schleife durchläuft alle Messdaten for f=1:length(A(:,1)) % Prüfen, ob ein Niederschlag registriert wurde if A(f,2)~=0 % Prüfen ob der Niederschlag bereits zuvor aktiv war if EreignisAktiv==0
EreignisIdx=EreignisIdx+1;
Zielmatrix(EreignisIdx,3)=A(f,1); % zuweisen des Start Datums end
EreignisAktiv=1;
Zielmatrix(EreignisIdx,1)=Zielmatrix(EreignisIdx,1)+A(f,2);
Zielmatrix(EreignisIdx,2)=Zielmatrix(EreignisIdx,2)+1;
elseif A(f,2)==0 && EreignisAktiv==1% Ereignis beenden, falls kein Niederschlag registriert wurde
EreignisAktiv=0;
end end
@SigiSorglos: ich kann deinen code nachvollziehen. ich werde versuchen diesen umzuschreiben damit er für eine beliebige zielmatrix funktioniert da ich nicht immer gleich lange messreihen habe.
@harald: dein code kann ich verstehen bis auf den "arrayfun(@..." befehl. hab gegooglet aber mir ist nicht ganz klar, was tut der mit a und b?
Ich habe noch eine Ergänzung gemacht. ich möchte die ereignisse unterschieden, sagen wir mal nach gewitter und regen. dazu habe ich die for-schleife (siehe code) erstellt. sie funktioniert zwar, aber geht das nicht eleganter/schöner programmiert? ich hab ein wenig bedenken dass dies bei langen messreihen zu viel rechenzeit benötigt?
Code:
anfang = find(A(2:end,2) > 0 & A(1:end-1,2) == 0) + 1;
if A(1,2) > 0
anfang = [1; anfang];
end
ende = find(A(2:end,2) == 0 & A(1:end-1,2) > 0) + 1;
if A(end,2) > 0
ende = [ende; size(A,1)];
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.