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

selbst wiederholende while Schleife mit Variablenausgabe

 

PatrickB
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2015, 13:14     Titel: selbst wiederholende while Schleife mit Variablenausgabe
  Antworten mit Zitat      
Hallo ich bin Neuling bei Matlab und habe Probleme eine gewünschte Funktion zu realisieren.

Es geht um folgende Schleife, die den Datensatz "data" durchläuft und eine Variable "testdata" ausgibt. Mein Problem ist jetzt, dass in meinem Matlab Code derzeit 10 dieser Schleifen stehen, mit Ausgabevariablen von testdata1 bis testdata10, da der Datensatz "data" oft mehr als einmal den Wert von "x" übersteigt.

Code:

x = gw_acc_fast;
n = 400;
m = 300;
data = yaccel_filter;

i=1;

while data(i) < x
    i = i+1;
    if data(i) >= x
        testdata = data((i-m):(i+n));
    end
end
 


Was ich nun erreichen möchte ist, dass ich nur eine Schleife brauche, die sich am ende immer wieder selbst aufruft, erneut nach einem Wert größer x sucht und dann testdatas mit fortlaufender Nummerierung (1..n) ausgibt.

Ist das irgendwie möglich so wie ich mir das vorstelle?
Würde mich freuen wenn mir hier jemand helfen kann, Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.12.2015, 18:15     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht klar, was du hier erreichen willst.
Inwiefern unterscheiden sich denn die 10 verschiedenen Code-Teile?

Wenn etwas 10 Mal ausgeführt werden soll, bietet sich eine for-Schleife an.

Wenn du mehrere testdata erzeugen möchtest, dann bieten sich da grundsätzlich Cell Arrays oder, bei Vektoren gleicher Länge, Matrizen an.

Einfacher als dieser if-/while-Code erscheint mir:
Code:
i = find(data > x, 1);


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2015, 18:31     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine schnelle Antwort!

Was ich erreichen möchte ist, alle Messpunkte des Datensatzes "data" zu erfassen, die einen vorher festgelegten Grenzwert "x" überschreiten. Im Voraus weiß ich aber nicht, wie oft das passiert. Es handelt sich dabei um Messwerte eines Beschleunigungssensors.
Zu jedem erfassten Messpunkt möchte ich dann einen Datensatz ausgeben, der eine festgelegte Anzahl Messpunkte vor und nach überschreiten von x beinhaltet - das sind dann die testdatas. Hoffe ich konnte das so jetzt besser erklären.

Dein Tipp mit dem find ist aber schonmal gut das kannte ich gar nicht, viel besser als mit if/while. Versuche damit und über ein cell array mal was hinzubekommen.
Für weitere Tipps bin ich natürlich sehr dankbar.

Grüße Patrick
Private Nachricht senden Benutzer-Profile anzeigen
 
PatrickB
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2015, 18:35     Titel:
  Antworten mit Zitat      
Wenn beispielsweise mein Datensatz "data" zu 5 Messpunkten den Wert von "x" übersteigt, dann hätte ich gerne als Ausgabe i1,i2,..,i5 welche die Messpunkte darstellen, sowie testdata1,testdata2,...,testdata5 da ich diese Datensätze zur weiteren Verarbeitung benötige.

Das ist mir gerade noch eingefallen um vielleicht zu verdeutlichen was mein Ziel ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.12.2015, 22:30     Titel:
  Antworten mit Zitat      
Hallo,

wenn du einen neuen, hilfreich erscheinenden Befehl kennenlernst, kann ich nur empfehlen, immer auch die Doku des Befehls zu lesen. Dann findest du hier beispielsweise heraus, dass du mit
Code:
i = find(data > x);

alle Werte findest, für die die Bedingung zutreffend ist.

Die verschiedenen testdata kannst du dann z.B. in einer for-Schleife in ein Cell-Array abspeichern.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 26.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2015, 16:14     Titel:
  Antworten mit Zitat      
Danke für deine Hilfe, die Doku zu dem Befehl habe ich natürlich gleich gelesen aber mein Ziel konnte ich über "find" leider doch nicht erreichen, da mein Programm nach Erkennung eines überstiegenen Wertes n Messpunkte nach vorne "springen" soll und erst dann wieder weitersuchen soll.

Habe es jetzt aber schlussendlich doch mit while/if hinbekommen, die testdatas werden in einem Array gespeichert. So funktioniert das für meine Zwecke jetzt echt gut.

Hier der relevante Code Teil, falls jemand ein ähnliches Problem haben sollte

Code:

while data(i) < x
    i = i+1;
    if data(i) >= x
        k = k+1;
        testdata(:,k) = data((i-m):(i+n));
        i = i+n;
    end
end
 


Güße Patrick
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 - 2025 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.