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

"festfrieren" der for-Schleife möglich?

 

wolff2007
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 19.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2012, 15:32     Titel: "festfrieren" der for-Schleife möglich?
  Antworten mit Zitat      
Hallo!

Ich komm und komm nicht auf die Lösung....

Vielleicht könnt ihr mir ja helfen. Ich wäre sehr dankbar.

Ich möchte Daten aus data2 in eine andere Matrix data3 übertragen. Jedem Zahlenwert sind in den Spalten zuvor jeweils eine Zeit und ein Name zugeordnet. Wenn sowohl Name als auch Zeit richtig sind (dies überprüfe ich mit zwei if-Bedingungen) wird der Zahlenwert aus data2 an der richtigen stelle in data3 eingeordnet. Mit Hilfe der Laufvariable i durchlaufe ich data2 bzw datum_num (datum_num ist die Zeitspalte von data2).
In dem Fall, in dem der Name richtig ist aber das Datum nicht soll die for-Schleife i=1:length(datum_num) "stehen bleiben" (bzw. einen Schritt zurückgesetzt werden um am Anfang der Schleife wieder um eins erhöht zu werden). Ich will also das genau in dem Fall ein Schritt der for-Schleife mehrfach durchgeführt wird. Ist das mit:

Code:
k=i;
 i=k-1;


umzusetzen.

Hier mein gesamter Code:
Code:
a=1;
for i=1:length(datum_num)
   if strcmp(data2(i,2),header{1,energietraeger}) %überprüfen des Namens
       if zeit_abs_num(a,1)==datum_num(i,1) %überpfrüfen der Zeit
        data3(a,energietraeger)=data2_energietraeger_num(i,1); %übertragen des Werts
       else
        k=i;
        i=k-1;% zurücksetzen der schleife
       end
        a=a+1;%erhöhen um einen Zeitschritt
   end
end
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.11.2012, 15:38     Titel:
  Antworten mit Zitat      
Hallo

Zitat:
Ich will also das genau in dem Fall ein Schritt der for-Schleife mehrfach durchgeführt wird


Nein es ist nicht möglich so ein Verhalten der FOR Schleife in Matlab umzusetzen, da die Schleife in Matlab ein FOREACH Verhalten inne hat

Besser hier WHILE zu verwenden
Private Nachricht senden Benutzer-Profile anzeigen
 
wolff2007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 19.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2012, 16:32     Titel:
  Antworten mit Zitat      
Vielen Dank denny!

Wie ich hier eine while-Schleife einsetzen soll verstehe ich noch nicht ganz.

Habe jetzt aber eine andere Möglichkeit bei der ich es vermeide die Laufvariable der for-schleife verändern zu müssen. Dafür führe ich ein 'z' ein, dass nur dazu dient, dass die if-schleifen nochmals abgerufen werden.

Warum gibt mir das immer noch nicht das erwünschte Resultat?

Code:
a=1;
i=1;
for z=1:length(datum_num)
   if strcmp(data2(i,2),header{1,energietraeger})%überprüfen des Namens
       if zeit_abs_num(a,1)==datum_num(i,1)%überpfrüfen der Zeit
          data3(a,energietraeger)=data2_energietraeger_num(i,1);%übertragen des Werts
          i=i+1;
          a=a+1;%erhöhen um einen Zeitschritt
       else
          a=a+1;%erhöhen um einen Zeitschritt
       end    
   else i=i+1;
   end
end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2012, 20:00     Titel:
  Antworten mit Zitat      
Hallo wolf,

das Problem ist, Du weißt nicht was Du machen willst.
Du hast zwei Schleifen die ineinander verschachtelt sind.
i läuft so lange bis data2(i,2) eine bestimmte Eigenschaft erfüllt.
dann läuft a solange bis zeit_abs_num(a,1) eine bestimmte Eigenschaft erfüllt.
Dann läuft i wieder weiter.
Code:
a=1;
for i=1:length(datum_num)
  if strcmp(data2(i,2),header{1,energietraeger}) %überprüfen des Namens
     while zeit_abs_num(a,1)~=datum_num(i,1) %überpfrüfen der Zeit
       a=a+1
     end
     data3(a,energietraeger)=data2_energietraeger_num(i,1); %übertragen des Werts
  end
end


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.11.2012, 10:41     Titel:
  Antworten mit Zitat      
Hallo wolff2007,

Es gibt keine "if-Schleifen".

Zitat:
Warum gibt mir das immer noch nicht das erwünschte Resultat?

Eine FOR-Schleife läuft stur alle Werte aus ihrem Index-Vekor durch. Innerhalb der FOR-Schleife kann man zwar den Lauf-Index ändern, das hat aber keine Auswirkung auf die Schleife!
Code:
for i = 1:10
  disp(i);
  i = 2 * i;
end

Eine WHILE-Schleife ist zur FOR-Schleife equivalent, bis auf den Unterschied, dass der Laufindex auch intern geändert werden kann:
Code:
i = 1;
while i <= 10
  disp(i);
  i = i + 1;
  i = 1000 + i;
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
wolff2007
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 19.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2012, 11:52     Titel:
  Antworten mit Zitat      
Achso ok vielen Dank!!
jetzt klapt es!!
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.