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

Schleife unterbricht bei unrealistischem Wert - wie weiter?

 

Quinn
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2014, 17:01     Titel: Schleife unterbricht bei unrealistischem Wert - wie weiter?
  Antworten mit Zitat      
Hallo!

Ich habe eine while-Schleife geschrieben und diese läuft solange wie ich zu dem gewünschten Wert komme. Dabei wird der Endwert der letzten Schleife als Anfangswert der nächsten Schleife für eine bestimmte Variable gesetzt.

Jetzt passiert es allerdings, dass zwischendurch Werte berechnet werden, die außerhalb des "Bereichs" (Physiklische Gegebenheit) liegen und somit nicht weitergerechnet werden kann.

Ich weiß nicht wirklich wie ich das Problem lösen kann.
Ich dachte allerdings, dass ich die Durchläufe zählen könnte und dann wenn bei einem Durchlauf i ein "fehlerhafter" Wert auftaucht ich den Wert der Schleife i-1 nehmen könnte und leicht verändere, wie zB Wert_neu= Wert_i-1 +0.1.
Und das dann solange mache bis ich keine Fehlermeldung bei der nächsten Schleife bekomme.

Denkt ihr das klappt? Habt ihr eine bessere Idee? So ganz gefällt mir mein Ansatz nicht.

Wie kann ich Matlab denn sagen, dass der den Endwert der Schleife i nehmen soll, wenn der Wert der Schleife i+1 "falsch" ist?

Hoffe das war verständlich. Ich danke Euch!!

Quinn
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 08.01.2014, 23:20     Titel:
  Antworten mit Zitat      
den letzten wert merken und nicht überschreiben ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2014, 23:29     Titel:
  Antworten mit Zitat      
Hallo, ja genau, das möchte ich machen.

Aber ich weiß nicht wie ich auf den gemerkten Wert zurückgreifen kann, wenn die Schleife abbricht.

if (wert <0)

"setze die Anfangsvariable auf den letzten Wert +0.1 und fange die while-Schleife von vorne an"

end

Beide Befehle machen mir Schwierigkeiten.
Ich kann einen Vektor erstellen mit den Endergebnissen, die für die nächste Schleifen als Anfangswert dienen: v=[wert(i=1),wert(i=2),...) Aber wie genau muss ich das schreiben?
Und mit welchem Befehl kann ich dann den letzten Wert aufrufen??

Und wie schaffe ich es, dass die while-schleife unterbrochen wird, aber dann trotzdem wieder anfängt???

DANKE!
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.01.2014, 00:39     Titel:
  Antworten mit Zitat      
am besten ist immer wenn du ein code beispiel postest. mit worten ist das immer schwer.
auf den letzen eintrag greift man mit v(end) zu zb
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 01:21     Titel:
  Antworten mit Zitat      
hallo, okay, es sind viele Funktionen und so, also habe ich es versucht einfach zu machen, hoffe verständlich?

Code:
 
if i==1
Geld=3
end

i=0

while P < 100

(Funktionen)

R=z*pi/t % für den Fall R<0 muss ich eine Lösung finden

[b] if R<0
  break
Geld= Geld[i(end)] %????
end[/b]

Strecke = R*Geschwindigkeit

Geld = Strecke*i/z-23*t

P = Geld/t*i +R/d*Geld

i=i+1 % Soll Vektor werden/sein
i=[i]
end

 


VG
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 09.01.2014, 09:56     Titel:
  Antworten mit Zitat      
Ich würde, bevor der nächste Schleifendurchlauf gestartet wird, eine Überprüfung des berechneten Wertes vornehmen.

Ist diese Überprüfung korrekt, erst dann würde ich den alten Wert überschreiben.
Ergibt sich eine Wertebereichsverletzung, muss der Wert eben angepasst werden (alter Wert + 0,1 wie du sagtest) und dann erst der alte Wert überschrieben werden.

Bsp. ohne Sinn, nur fürs Verständnis:
Code:

blablub = randi(5)+1;
alterWert = rand;
while alterWert < 100
neuerWert = alterWert * blablub
  if neuerWert < 1 %auf Grenzverletzung prüfen
    alterWert  = alterWert  + 0.1;
  else
    alterWert  = neuerWert;
  end
end

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Quinn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2014, 22:20     Titel:
  Antworten mit Zitat      
Danke für Eure Beiträge.
ich werde versuchen es so zu machen, Martina.
Ich habe eine Änderung vorgenommen (z_neu!), wie im Code vermerkt. Wie findet ihr den jetzigen Versuch?

Code:

if i==1
z_neu=3
end

i=0

while P < 100

(Funktionen die auch z_neu benutzen)


R =z_neu*pi/t % für den Fall R<0 muss ich eine Lösung finden
%ÄNDERUNG: für bestimmte "z" wird R<0, dh. das veränderte z von letztem Durchlauf muss wieder benutzt werden!
     if R<0
        z_alt = z_alt+0.1

        R =z_neu*pi/t

           if R>0
              z_alt =z_alt
           else
              while R<0
                     z_alt = z_alt-0.1
                     R =z_neu*pi/t
              end
           end

     else
         z_neu=z_alt
     end
 
Strecke = R_neu *Geschwindigkeit

Geld = Strecke*i/z-23*t

P = Geld/t*i +R/d*Geld

if P <100
    Geld=Geld_finalerWert
end

z_alt=z_neu

i=i+1 % Anzahl der Durchläufe

end
 


Macht das Sinn? beim Verändern von z_alt muss ich ja sehen ob ich das vergrößere oder verkleinere ( z_alt = z_alt-/+0.1).

wenn die Schleife durchläuft und R<0, dann weiß ich, dass ich ein anderes z_neu benutzen muss. Allerdings wurden schon einige Funktionen mit dem "falschen" z durchgeführt.
Wie kann ich das also überschreiben, die Schleife abbrechen und alles von neuem mit dem neuen, veränderten Wert aus letztem Durchlauf berechnen?
"break" lässt die Schleife zwar abbrechen, aber lässt sie nicht automatisch von vorne durchführen. Oder muss ich alles dann noch einmal einfügen (den ganzen code wie oben) und durchführen lassen?


Vielen Dank!!
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.