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

for schleife u werte loeschen

 

zienat

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 05:03     Titel: for schleife u werte loeschen
  Antworten mit Zitat      
hallo,
ich habe ein problem mit einer for schleife
es sollen werte in einem vektor geloescht werden. dadurch muesste sich aber die forschleife verkuerzen u man muesste ja vorher wissen wie viele werte geloescht werden. brauche eine loesung bei der man das vorher nicht wissen muss.brauche quasi einen variablen ersatz fuer die "4"
Code:

for i = 1:length(a)- 4 %die 4 ist die anzahl der geloeschten elemente
    if (a(i)<a(i+1)) & (a(i+1)<a(i+2))
       a = a(a~=a(i+1))
end
end

thx


Thomas84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 06:37     Titel:
  Antworten mit Zitat      
vielleicht mit while:

Code:

i = 0;
while i<length(a)-2
    i = i+1;
    if (a(i)<a(i+1)) & (a(i+1)<a(i+2))
       a = a(a~=a(i+1))
    end
end
 


Am besten wäre es natürlich wenn man die Schleife ganz vermeiden könnte. Seh jetzt aber auch keine einfache Lösung, da sich a ja ständig verändert.
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 21.10.2009, 15:06     Titel:
  Antworten mit Zitat      
Hallo,

es kommt ein bischen darauf an, wie im nächsten Schritt verfahren werden soll. Beispiel: a = [1 2 3 2 4]. Für i=1 würde er die Zweien rausschmeißen, d.h. a = [1 3 4]. Soll jetzt wieder von vorne gestartet werden mit i=1 und dann die 3 eliminiert werden?

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
ste99947

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2009, 22:34     Titel:
  Antworten mit Zitat      
Hallo,
wie wärs hier mit?

Code:

a=[ 2 3 1 2 3 3 1 2 3 4 4]
b=[0 (diff(a)>0)]
c=[ (diff(b)==0) 0]
d=find(b.*c)
a(d)=[]
 


Das ist vermutlich schnell aber auch speicherintensiv.


Stephan
 
zienat

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2009, 02:54     Titel:
  Antworten mit Zitat      
vielen dank fuer die antworten! ich habe diese version verwendet und hat auch super geklappt!

i = 0;
while i<length(a)-2
i = i+1;
if (a(i)<a(i+1)) & (a(i+1)<a(i+2))
a = a(a~=a(i+1))
end
end

ABER leider nciht fuer alle meine datenreihen! Sad und zwar habe ich im prinzip einen a wert und einen b wert und der zugehoerige b wert soll auch geloescht werden:
i = 0;
while i<length(a)-2
i = i+1;
if (a(i)<a(i+1)) & (a(i+1)<a(i+2))
a = a(a~=a(i+1))
b = b(b~=b(i+1))
end
end

das klappt leider nicht so ganz. am ende habe ich eine ungleiche anzahl von a und b werten was nicht sein kann und soll! (am anfang hatten a und b die gleiche groesse)
wo koennte der fehler stecken?
 
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.