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

Ersetzen einer for-Schleife -> meine App dadurch langsam

 

Sakerfalke
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2017, 04:28     Titel: Ersetzen einer for-Schleife -> meine App dadurch langsam
  Antworten mit Zitat      
Hallo ihr lieben Helfer,

ich heiße Philip, bin TUM Student und programmiere gerade einen Code + GUI in App Designer, der mir aus logfiles von Flugzeugsensoren Sinkpolaren ermittelt.
Das nur als grobe Info zu meinem Projekt.

Das Problem ist jetzt eig. nur dass ich eine for-Schleife, die den Code sehr verlangsamt, gerne ersetzen würde. Evtl. mit einer passenden Funktion wie z.B. mean oder sum, da es hierbei darum, mithilfe einer Summe von Werten Mittelwerte zu bilden, die vorher aber erst in einer Tabelle gesucht werden müssen.

Die Schleife um die es hier geht ist dazu da, Intervalle der Messdaten zu bilden für bestimmte gerundete ASpd's
Die Schleife muss alle Zeilen des riesigen bereits reduzierten Tables "T_redu" durchgehen und darin nach gleichen Werten von ASpd_round suchen,
In jeder Zeile dieses Tables steht auch jeweils ein Wert VSpd in einer anderen Spalte
Für jeden ASpd_round-Wert, den es im neuen Table dann nur genau EINMAL geben soll, sollen alle gefundenen VSpd-Werte im Neuen Table jeweils zu einem ASpd_round-Wert zu der Variable VSpd_SUM addiert werden, damit daraus später die Mittelwerte berechnet werden können.

Das Ganze habe ich ich bis jetzt wie folgt gelöst:
Code:

...
% Erst müssen Maximal- und Minimalwerte gefunden werden, um daraus die Größe des neuen Tables zu bestimmen.
ASpd_MIN = min(T_redu.ASpd_round);
ASpd_MAX = max(T_redu.ASpd_round);
% acc ist übrigens die Intervalllänge, womit vorab aus den ASpd_Werten die ASpd_round-Wert gebildet wurden.
% QTTY = Quantity/ Anzahl aller verschiedenen ASpd-Werte
ASpd_QTTY = int32((ASpd_MAX - ASpd_MIN_V)/acc + 1);

% Table erstellen mit wenigen Variablen, die schon mal mit 0'en besetzt werden.
T_V = array2table(zeros(ASpd_QTTY_V,4),'VariableNames',...
    {'ASpd_round','ASpd_QTTY','VSpd_SUM','VSpd_MEAN'});
T_V.ASpd_round = (ASpd_MIN:acc_V:ASpd_MAX)';

% Schleife, um die es hier geht:
% Schleife zum Auffinden(find) & Zusammenzählen(SUM=Summe) aller Sinkraten (VSpd = vertical speed)
% und der auftretenden Anzahl(QTTY=quantity) zu jeder Fluggeschwindigkeit (ASpd = air speed)
for ii = 1:height(T_redu)
    % row_ASpd ist nur ein Hilfsvektor zur Logikindizierung
    row_ASpd = find(T_redu.ASpd_round(ii) == (T_V.ASpd_round));

    % jeweils Wert von VSpd_smooth aus der Tabelle T_redu in die neue Tabelle T_V
    % in jeweilige Zeile zur Variablen VSpd_SUM bzw. E_SUM addieren und
    T_V.VSpd_SUM(row_ASpd) = T_V.VSpd_SUM(row_ASpd) + T_redu.VSpd_smooth(ii);

    % Wert von ASpd_QTTY dieser Zeile um 1 erhöhen
    T_V.ASpd_QTTY(row_ASpd) = T_V.ASpd_QTTY(row_ASpd) + 1;
    % sodass im nächsten Schritt Mittelwert VSpd_MEAN bzw. E_MEAN berechnet werden kann.
end % Ende der Schleife

% Berechnen der Durchschnittlichen Sinkgeschwindigkeiten
% für jede wahre Fluggeschwindigkeit gibt es genau einen Durchschnittswert:
T_V.VSpd_MEAN = T_V.VSpd_SUM ./ T_V.ASpd_QTTY;
...
 


Weiß hier unter Euch evlt. jmd einen Weg, wie man die for-Schleife hier loswerden könnte?
Vielen Dank schonmal im Voraus für Eure Hilfe!

Phil
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.10.2017, 11:25     Titel:
  Antworten mit Zitat      
Hallo,

fließen letztlich alle Werte in die Mittelung ein? Falls ja, lässt sich das mit findgroups / splitapply umsetzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sakerfalke
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2017, 21:44     Titel:
  Antworten mit Zitat      
Zitat:
Fließen letztlich alle Werte in die Mittelung ein?
Falls ja, lässt sich das mit findgroups / splitapply umsetzen.
Grüße,Harald


Hallo Harald, vielen Dank für Deine schnelle und vor allem hilfreiche Antwort. Smile
Ja, alle Werte fließen in die Mittelung ein.
Und das beste: Es klappt einfach hervorragend.
Danke für deine super Hilfe. Very Happy

Wie du mit einem Einzeiler einfach mal das Ganze Problem lösen konntest. Shocked Rolling Eyes
Genial^^ Also danke nochmal und schönen Abend noch.

Phil
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.