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

Startwert festlegen

 

walid
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2008, 15:00     Titel: Startwert festlegen
  Antworten mit Zitat      
Hallo zusammen,

ich hoffe ihr könnt mir weiterhelfen.


Ab einem bestimmten Wert x soll die Funktion f in einer for-Schleife starten, ich weiss nur nicht mit welchem Befehl ich das ganze realisiere.

Beispiel:

Sobald x > 10 ist soll die Funktion f starten. f befindet sich in einer Schleife. x schwankt aber, d.h. x ist z.b 4, 11, 1, 10, 22. Sobald aber x > 10 ist, soll das für immer so sein, ich will dann nicht mehr prüfen, ob x > 10 ist.

Ich hoffe ihr konntet verstehen worauf ich hinaus will

Vielen Dank...
Private Nachricht senden Benutzer-Profile anzeigen


freshp
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 03.06.2008, 08:44     Titel: Re: Startwert festlegen
  Antworten mit Zitat      
walid hat Folgendes geschrieben:

Ab einem bestimmten Wert x soll die Funktion f in einer for-Schleife starten, ich weiss nur nicht mit welchem Befehl ich das ganze realisiere.

Beispiel:

Sobald x > 10 ist soll die Funktion f starten. f befindet sich in einer Schleife. x schwankt aber, d.h. x ist z.b 4, 11, 1, 10, 22. Sobald aber x > 10 ist, soll das für immer so sein, ich will dann nicht mehr prüfen, ob x > 10 ist.


Also so ganz verstehe ich nicht, worauf du hinaus willst. Die Funktion f enthält eine for-Schleife?
Code:

function f(x)
    for i=1:x
         %tue irgendwas
    end
end
 


Und f soll dann aus einer anderen Schleife, in der der Wert von x eingelesen oder errechnet wird aufgerufen werden?
Code:

while(1)
    %Einlesen von x ...
    if x>10
        break;
    end
end

f(x);
 

Das würde f(x) einmal nach dem Erreichen von x>10 aufrufen. Ansonsten könnte ich mir noch so etwas vorstellen:
Code:

gt10=0;
while(1)
    %Einlesen von x ...
    if gt10
        f(x);
    elseif x>10
        gt10=1;
    end
end
 

gt10 ist ein Marker, der gesetzt wird, wenn x einmal größer war als 10. Sobald der Marker gesetzt ist, wird in jedem Schleifendurchlauf f(x) aufgerufen.

Vielleicht hilft's dir weiter, ansonsten beschreibe bitte genauer, was du eigentlich machen willst. Smile

Gruß,
Lars
Private Nachricht senden Benutzer-Profile anzeigen
 
walid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2008, 12:06     Titel:
  Antworten mit Zitat      
Hallo Lars,

erstmal danke für deine Antwort und tut mir leid für die etwas undeutliche Erklärung.

Ich versuchs ein wenig präziser

Code:


for 1:n

sobald x > als bestimmter Wert wird,
berechne f(x);

end

 


Es so zu programmieren ist nicht das Problem, was ich jetzt versuche ist folgendes:

Mein x ist nicht monoton, d.h. es kann sein, dass dieser bestimmte Wert erreicht wird, aber im nächsten Schritt gleich wieder kleiner wird.
Ich will es nun so programmieren, dass sobald dieser bestimmte Wert erreicht wird, ich nicht mehr untersuchen brauche ob x>... ist.

D.h. sobald x>... ist, startet dann meine Funktion und berechnet immer wieder ohne auf die Grösse von x zu beachten.

Vielen Dank...

Gruss walid
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.06.2008, 12:47     Titel:
  Antworten mit Zitat      
Hallo,
ich verstehe so als ob du erst ab diesem Wert erst die Berechnung starten möchtest.
Ist x ein Vector? Oder wozu brauchst du eine for-Schleife?
Code:

% falls ein vektor
% würde ich einfach erstes wert x>10 suchen
% und dann ab der Position rechnen lassen
x=[4, 11, 1, 10, 22];
pos = find(x>10,1);
berechne(x(pos:end));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
walid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2008, 13:23     Titel:
  Antworten mit Zitat      
Hallo,

ich habe nur einen Teil des gesamten Programms eingetragen und meine Funktion f(x) ist in einer Schleife.

x ist kein Vektor, sie wird immer nach jedem Durchlauf neu berechnet und f(x) startet erst dann, wenn x > bestimmter wert z ist. Ist dieses z erreicht, dann will ich nicht mehr bei jedem Durchlauf untersuchen müssen ob x>z ist, sondern ab dann läuft immer f(x) auch wenn x<z sein sollte.

Vielen Dank,

Gruss walid
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.06.2008, 13:49     Titel:
  Antworten mit Zitat      
Also in solchen Fall wurde ich zu einem Flag raten
vielleicht so:
Code:

% flag runFct auf falsch setzen
runFct=false;
% in schleife einfach flag abfragen
for i=1:n
  % dummy Funktion
  x=berechneX();
   
  %  hier flag überprüfen
  %  wenn gesetzt direkt f(x) ausführen
  %  sonst x>z überprüfen
  if runFct
    f(x);
  elseif x > z
    runFct=true;
  end

end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
walid
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2008, 12:50     Titel:
  Antworten mit Zitat      
Vielen Dank, dass ist genau was ich gesucht habe. Jetzt läuft alles prima...

Gruss walid
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 - 2024 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.