|
|
Schleifenabbruch mit break funktioniert nicht? |
|
klepper810 |

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 13:58
Titel: Schleifenabbruch mit break funktioniert nicht?
|
 |
Hallo,
ich möchte eine for-Schleife bei Erreichen eines Wertes vorzeitig beenden. Die break-Anweisung, die ich benutze funktioniert aber nicht. Hier mein Code:
Die erste Abbruchanweisung mit z >= 1440 funktioniert, die zweite aber nicht. Kann mir jemand helfen?
Viele Grüße
|
|
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 14:14
Titel:
|
 |
Da die Syntax ok ist, muss wohl die Bedingung das Problem sein. Offensichtlich tritt
nie ein. Da außer dir aber niemand weiß, welche Werte die Variablen haben, sind weitere Hilfeversuche Kaffeesatzleserei
|
|
|
klepper810 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 15:00
Titel:
|
 |
OK, das stimmt wohl
Also: Die Werte des Vektors RSVR_max steigen ins Unermessliche und überschreiten bereits in der 43. Zeile von 1440 den Wert 16,4 welcher der Variable rsvr_f zugewiesen ist. Im Anhang befindet sich ein Excel-File mit den Werten von RSVR_max.
Beschreibung: |
|
 Download |
Dateiname: |
RSVR_max.xls |
Dateigröße: |
84 KB |
Heruntergeladen: |
248 mal |
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 15:06
Titel:
|
 |
Und welche Werte hat z?
Es muss ja von 1...length(RSVR_max) gehen, so fern RSVR_max ein Vektor ist, damit auf alle Werte in RSVR_max zugegriffen wird.
Offensichtlich ist z eben nicht der Index, sondern etwas anderes...
Vemutlich entspricht aber der Aufbau nicht dem gewünschten Verhalten.
Was soll denn geprüft werden...also welche Abbruchbedingungen gibt es?
|
|
|
klepper810 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 15:22
Titel:
|
 |
z ist meine Laufvariable und entspricht der Zeit, sie läuft von 1 bis 1440 (Minuten eines Tages). Die Schleife für z umschließt die for-Schleife:
Der Speicher soll bis zu seiner maximalen Kapazität gefüllt werden (16,4). Ist diese erreicht, soll die Schleife verlassen werden. Ich habe einen Plot angehängt. Der rote Graph entspricht RSVR_max.
Natürlich kommt nach der for-Schleife noch jede Menge anderer Code, welcher die Vektoren RSVR_max(z) und HEAT_acc_max(z) verändert. Ich habe jetzt nur der Übersichtlichkeit wegen den Rest weggelassen.
Beschreibung: |
|
 Download |
Dateiname: |
RSVR.JPG |
Dateigröße: |
30.75 KB |
Heruntergeladen: |
217 mal |
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 15:36
Titel:
|
 |
Du kannst nicht die Zeit als Index für deinen Vektoren nehmen.
Jeder Wert in RSVR_max entspricht einem Zeitwert in deinem Zeitvektor? Der letzte Messwert von RSVR_max entspricht RSVR_max(t=1440min)?
|
|
|
klepper810 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 16:10
Titel:
|
 |
Genau so wollte ich es machen...
Also eine separate Variable für den Vektor und für die Zeit?
Und warum?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 16:26
Titel:
|
 |
Wenn der letzte Messwert RSVR_max(end) = RSVR_max(t=1440min) entspricht , ist eine Überprüfung doch gar nicht notwendig. Denn dann gibt es keinen weiteren Messwert, der einer größeren Zeit als 1440min entspricht.
Falls auch Messwerte nach t=1440min vorhanden sind, hier mit Überprüfung der Zeit
Das setzt aber voraus, dass length(t) und length(RSVR_max) gleich sind, also gleiche viele Werte enthalten.
|
|
|
klepper810 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 21:57
Titel:
|
 |
 Klicke hier, um den Artikel bei Amazon.de anzuschauen.
Die Überprüfung ist schon notwendig, da, entschuldige, das hatte ich vergessen anzugeben, in meiner Syntax
der Variable t_run der Wert 60 zugewiesen ist. Wird also die Schleife zwischen z=1341 und z=1440 noch einmal durchlaufen, würde durch die for-Schleife der Endwert 1440 überschritten werden, daher die Überprüfung.
Diese funktioniert ja aber auch. Aber warum die andere Überprüfung mit RSVR_max nicht funktioniert, habe ich noch nicht verstanden.
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 04.12.2014, 22:11
Titel:
|
 |
Der ganze Code macht so keinen Sinn.
Es scheint aber auch so, dass du meine Vorschläge nicht verstehst und umgekehrt. So können wir hier noch mehrmals posten und reden wohl aneinander vorbei.
Hänge doch mal bitte als MAT file alle Variablen aus deinem Workspace an, die man benötigt um deinen Code verwenden zu können. Befehl "save" nutzen
Nochmal zum Verständnis deine gewünschten Bedingungen für den Abbruch sind:
1. wenn der i. Wert von RSVR_max(i) >= einer Konstante ist
RSVR_max(i) >= rsvr_f
wobei i=1,2,3...length(RSVR_max)
oder 2. wenn der Zeitwert t=1440min überschritten ist
Ist das so richtig?
Und bitte mal den ganze Code posten! Denn welchen Wert haben u und z wenn die Schleife zu 1. mal durchlaufen wird?
Ich weiße auch auf folgenden Punkt des goMatlab Knigge hin:
Zitat: |
Werbung ist auf goMatlab.de nicht erwünscht.
Ausgenommen davon sind lediglich:
o Projekte die in direktem Zusammenhang mit Matlab stehen.
|
|
|
|
klepper810 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.12.2014, 13:42
Titel:
|
 |
Hi,
ich habe es hinbekommen.
Ich habe die Bedingungsprüfung ans Ende der for-Schleife gesetzt:
Nun wird die Schleife verlassen, sobald der Wert von rsvr_f erreicht ist
Kann das damit zu tun haben, dass zum Zeitpunkt der Prüfung der neue Wert RSVR_max(z) noch nicht berechnet ist?
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 05.12.2014, 13:54
Titel:
|
 |
Nein, denn würde die Abfrage wie vorher auch vor der erneuten Berechnung statfinden, würde der Wert RSVR_max(i) einfach nur 1 i später über rsvr_f liegen.
Aber ehrlich gesagt verstehe ich deinen Code immer noch nicht, was die Zählvariable i angeht.
Damit läuft i = 1,2,3,...61. Dementsprechend werden auch nur die ersten 61. Werte in RSVR_max(i) etc. gelesen und neu berechnet.
Wie soll also i >= 1440 sein? Ist u größer 1, wird eben auf den Vektorenbereich
RSVR_max(u:u+t_10) zugegriffen. Ist das wirklich so gewollt?
|
|
|
klepper810 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 04.12.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.12.2014, 14:25
Titel:
|
 |
Die Zählvariable i soll das ganze Programm hindurch von 1 bis 1440 laufen.
Bevor nun die For-Schleife ausgeführt wird, weiße ich den aktuellen Wert von i u zu, um den Startwert für die for-Schleife zu bekommen. Der Endwert für die For-Schleife bekomme ich, in dem ich zu u den Wert der Variable t_run (= 60) addiere. Die Zählvariable läuft somit auch während der for-Schleife mit, was auch so gewollt ist.
Ich weiß nicht ob es jetzt verstehst... eine bessere Erklärung fällt mir im Moment nicht ein. Da ich Anfänger in Matlab bin, weiß ich aber nicht ob ich mit der Methode irgendwann an Grenzen stoße...
Danke auf jeden Fall für die Mühen!
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 05.12.2014, 14:50
Titel:
|
 |
Deine Schleife läuft aber eben nicht von 1 bis 1440, sondern immer nur im Bereich u:u+t_run mit dem Wert u zum aktuellen Aufruf.
Wenn immer die Abschnittsweise Berechnung gewünscht ist, braucht es eben noch eine zweite Schleife.
Dein Code stimmt soweit also, aber die Bedingung ist RSVR_max(i) >= rsvr_f niemals wahr weshalb die Schleife dann auch nicht abgebrochen wird.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|