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

 

arise
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 02.05.2011, 09:32     Titel: For Schleife
  Antworten mit Zitat      
Hallo

Ich habe ein Problem mit einer Schleife...

Code:

E = 1;
 
 for z = D (6:length(D)),
     
     if sum (z:-1:z-invtime)== 0, %Wenn die Summe der 5 vorherigen Zahlen = 0 ist, heisst das das vorher nicht ausgelöst wird und die Investitionen sich nicht überschneiden.
 
 E = E ((data(2:length(data),1)) .* D); % C ergibt alle Preise, deren Return den Trigger auslösen
 
     else 0;
         
     end
     
 end
 



Ich muss ja vor der Schleife die Variable E definieren aber der Output nach der Schleife ist immernoch E = 1...Warum?

Gruess Arise
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 02.05.2011, 09:49     Titel:
  Antworten mit Zitat      
Deinen gesamten Code finde ich sehr seltsam..

Code:
(z:-1:z-invtime)


erstellt einen Vektor der von z in -1er Schritten bis z-invtime läuft. Die Summe davon ist nur 0, wenn z = invtime ist.

Code:
E = E ((data(2:length(data),1)) .* D)


Hier überschreibst du E, nutzt aber gleichzeitig einen alten Wert von E (der ja zumindest im ersten Schleifendurchlauf noch 1 ist. Passt das?. C gibt es garnicht? Was ist D?

Benutze mal den Debugger und schaue dir an, ob er überhaupt in die if-Bedingung reinkommt.
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 02.05.2011, 09:56     Titel:
  Antworten mit Zitat      
Zum ersten Teil: Das ist für einen Vektor, der 0 und 1 hat. Es soll nur weitergehen, falls die 4 WErte(invtime) vorher 0 sind. Somit sollte das gehen oder?


Zum zweiten: Doch C gibt es schon...der Code ist noch länger... Wie muss ich denn das machen mit dem Überschreiben...Ich dachte man muss vor der Schleife den Wert definieren und dann wird er in der Schleife geändert...

D ist ein 0 1 Vektor ( 1 x 1305)

Der Debugger hab ich noch nie benutzt, schaue mir das Mal an, ob ichs hinkriege...

Danke für deine Hilfe... Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 02.05.2011, 10:10     Titel:
  Antworten mit Zitat      
...habs jetzt mit dem Debugger angeschaut und wollte mit
Code:



in die Werte schauen, die die Schleife annimmt aber dann kommt als Output
Code:


Was ist mein Fehler?

Gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 03.05.2011, 09:51     Titel:
  Antworten mit Zitat      
Habe noch eine Frage:

Der Debugger zeigt mir jetzt an, dass die Schleife gar nicht durchlaufen wird bzw. z nur den ersten Wert annimmt, wieso?

Code:


 E = returns;

for z = (D(6) : D(1305))
     
   
   E = z + 1;  
   
 end
 


Anmerkung: Returns ist ein 1305 x 1 Spaltenvektor, wie auch D

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 03.05.2011, 09:54     Titel:
  Antworten mit Zitat      
Gib mal in die Kommandozeile:

D(6)

und

D(1305)

ein. In diesem Bereich (mit 1er Schrittweiten) läuft die Schleife..
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 03.05.2011, 09:57     Titel:
  Antworten mit Zitat      
Beide WErte sind 0, da fast alle Werte von D 0 sind aber im Debugger sollte er ja in der Schleife immer wieder hoch und runter springen (der grüne Pfeil). Das tut er nicht. ER geht durhc als wäre keine Schleife da und Z ist 1x1 Vektor mit dem WErt 0
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 03.05.2011, 10:08     Titel:
  Antworten mit Zitat      
Lies dir mal die Grundlagen zu Schleifen durch, das ist die einfachste Lösung, anstatt hier nach und nach die Fehler heraus zu suchen.

Deine Schleife läuft von 0 bis 0, also garnicht. Du musst an deiner Schleifenbedingung etwas ändern.
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 03.05.2011, 10:15     Titel:
  Antworten mit Zitat      
Hab ich schon gemacht deshalb frage ich hier. Aber im Grundsatz ist der erste und der letzte WErt 0 aber dazwischen nicht, dann sollte er sie durchlaufen. Habe jetzt den Schlusspunkt so angepasst, dass es bei einer 1 aufhört und jetzt durchläuft er die Schleife genau 2 Mal. Aber er sollte doch so jeden Wert Intervall annehmen und nicht nur 0, weil die erste und letzte 0 sind...
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 03.05.2011, 10:36     Titel:
  Antworten mit Zitat      
Dann musst du

Code:
for z = D(6:1305)


machen
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 03.05.2011, 10:42     Titel:
  Antworten mit Zitat      
das habe ich jetzt auch grad gemerkt Smile

Das geht jetzt.

Danke

Ich habe noch eine klein Grundsatzfrage zu Schleifen

Ich habe in der for Schleife eine Zuweisung die ich mit einer Variablen definiere. Damit diese Variable erkannt wird muss ich sie vor der Schleife schon mal definieren, z. B. als 1. Dann lass ich es laufen aber dann ist der Output der Variable 1 und sie wird nicht überschrieben...

was mache ich da falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 03.05.2011, 10:46     Titel:
  Antworten mit Zitat      
Du überschreibst den Wert E in jedem Schleifendurchlauf aufs neue. Der alte Wert von E wird nicht beachtet.
Private Nachricht senden Benutzer-Profile anzeigen
 
arise
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 03.05.2011, 11:03     Titel:
  Antworten mit Zitat      
Ich habe jetzt endgültig das Problem gefunden: Die Schleife läuft sofern ich natürliche Zahlenabfolgen nehme z.B. 1 bis 1000 aber ich möchte, dass Matlab die Schleife mit Werten des Vektors D durchläuft dessen Wert unregelmässig abwechselnd 0 und 1 ist. WEnn ich das mache durchläuft er die Schleife nicht mehr. Was muss ich ändern, dass Matlab auch Schleifen mit Vektorwerten macht.

Code:

for z = (D(6:1305))


so nimmt er einen 1300 x 1 Vektor ich will aber 1300 mal einen 1 x1 Vektor der den Wert der jeweiligen Position von D annimmt...
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: 03.05.2011, 16:44     Titel:
  Antworten mit Zitat      
Hallo arise,
Code:

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 02.05.11
Wohnort: Zürich
Version: ---
     Beitrag Verfasst am: 05.05.2011, 10:36     Titel:
  Antworten mit Zitat      
Danke sehr, das klappt jetzt...

Habe aber immer noch das Problem, dass E in der Schleife nicht überschreiben wird...

Code:
E = (data(2:length(data),1));
   
 for z = transpose(D(6:1305))      
   
   
     if sum (z:-1:z-invtime)== 0, %Wenn die Summe der 5 vorherigen Zahlen = 0 ist, heisst das das vorher nicht ausgelöst wird und die Investitionen sich nicht überschneiden.

 E = (E .* D); % C ergibt alle Preise, deren Return den Trigger auslösen
 
     
         else  0 ;
     end
 
   
 end


Es durchläuft die Schleife aber E wird nicht angepasst wie es sollte sondern bleibt wie vorher definiert...

Weiss jemand wieso?

Gruess arise


P.S. Habe im DEbugger gesehen, dass diese Zeile gar nicht angeschaut wird sondern einfach übersprungen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.