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

Bestimmte Werte unter erfüllen einer Bedingung ausgeben

 

fuego
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 15.11.13
Wohnort: Nähe Karlsruhe
Version: MATLAB R2013A
     Beitrag Verfasst am: 28.12.2013, 20:04     Titel: Bestimmte Werte unter erfüllen einer Bedingung ausgeben
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Frage beim Auslesen von bestimmten Werten, eines von mir programmierten Prozesses. Die Werte des Prozesses werden alle in einer Funktion f gespeichert. Bezüglich des Prozesses wird ein konstantes Level u hinzugezogen und betrachtet, wie oft dieses durch den Prozess überschritten wird. Mit dem unterstehenden Code habe ich bisher nur geschafft, dass er mir die Anzahl von Level Überschreitungen ausgibt. Was ich aber benötige ist die Ausgabe aller Werte von f(i) wenn der Fall :

Code:
vorsprung < u && nachsprung >= u)


eintritt. Für jeden Tipp oder Hilfe wäre ich euch sehr dankbar.

Code:

%Anzahl Überschreitungen
uber = 0;
for j=1:(length(f)-1)
  vorsprung = f(j);
  nachsprung = f(j+1);
  if (vorsprung < u && nachsprung >= u)
    uber = uber + 1;
  end
end
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

dann musst du doch nur im if-Teil die gewünschten Werte sammeln?

Eleganter wäre natürlich logische Indizierung:
Code:
ind = f(1:end-1) < u & f(2:end) >= u;
sum(ind)
f(ind)


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 15.11.13
Wohnort: Nähe Karlsruhe
Version: MATLAB R2013A
     Beitrag Verfasst am: 28.12.2013, 20:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

du meinst also der Code hat dann die folgende Gestalt:

Code:

uber = 0;
for j=1:(length(f)-1)
  vorsprung = f(j);
  nachsprung = f(j+1);
  if (vorsprung < u && nachsprung >= u)
     ind = f(1:end-1) < u & f(2:end) >= u;
     sum(ind)
     f(ind)
    uber = uber + 1;
  end  
end
 


Es wird die richtige Anzahl der Überschreitungen zwar ausgegeben, aber die Werte die ausgegeben werden, entsprechen nicht den Zeitpunkten auf der x-Achse, wo f das Level u überquert.

Wo habe ich da bloß den Fehler drin?

Danke schonmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.12.2013, 21:05     Titel:
  Antworten mit Zitat      
Du brauchst keine Schleife mehr, Haralds Zeilen sind schon alles:
Code:
ind = f(1:end-1) < u & f(2:end) >= u;
anzahl_spruenge = sum(ind);
werte_am_uebergang = f(ind);
Private Nachricht senden Benutzer-Profile anzeigen
 
fuego
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 15.11.13
Wohnort: Nähe Karlsruhe
Version: MATLAB R2013A
     Beitrag Verfasst am: 28.12.2013, 21:24     Titel:
  Antworten mit Zitat      
Das klappt leider immer noch nicht. Er gibt mir zwar die richtige Anzahl von Überschreitungen an, die ausgegebenen Werte in werte_am_uebergang entsprechen allerdings nicht den Zeitpunkten, an denen sich diese Überschreitungen ereignen. Beispielsweise findet zum Zeitpunkt t=8 auf der x-Achse eine Überschreitung statt, er gibt mir aber einen Wert 3.6255 aus.

Was ich benötige ist die Zahl des i-ten Spalteneintrags wo

Code:

f(1:end-1) < u & f(2:end) >= u
 


dieses Ereignis stattfindet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2013, 21:37     Titel:
  Antworten mit Zitat      
Hallo,

du musst dich schon entscheiden, was du willst.
Erst sagst du, du willst die f-Werte, nun willst du t-Werte.
Dann willst du eine Zahl - den Index?

Code:
ind = f(1:end-1) < u & f(2:end) >= u;
anzahl_spruenge = sum(ind);
werte_am_uebergang = f(ind);
zeitpunkte_am_uebergang = t(ind);
indizes_am_uebergang = find(ind);


Setz dich doch mal ein wenig mit logischer Indizierung auseinander, dann solltest du bei so etwas auch selbst weiterkommen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 15.11.13
Wohnort: Nähe Karlsruhe
Version: MATLAB R2013A
     Beitrag Verfasst am: 28.12.2013, 21:59     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe es leider nicht präzise genug formuliert. Du hast mir aber sehr geholfen, vielen Dank dazu! Ich hatte in der Tat mit der Indexierung meine Probleme.

Euch beiden einen guten Rutsch und nochmals vielen Dank für eure Hilfe!
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.