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 beenden bei negativem Wert

 

grueßdichmeiner
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 16.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2011, 11:19     Titel: Schleife beenden bei negativem Wert
  Antworten mit Zitat      
Hallo,

ich habe 2 Bedingungen, die erfüllt werden sollen:
p.aD=0 und h >=0,
ich möchte, dass die rechnung beendet wird, wenn h das erste mal negativ wird.
Ich habe es bisher mit diesem code versucht:

Code:
%
while p.aD==0
  if h >=0  
         
  F_N= ((2/3)*p.E*(sqrt(p.r_12))*h.^(3/2)-p.F_H0);
  end
 
 
end
   


ist nicht schön, ich weiß. Und funktioniert auch nicht.
Ich wäre für eure Hilfe sehr dankbar Embarassed
Private Nachricht senden Benutzer-Profile anzeigen


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 07.12.2011, 11:27     Titel:
  Antworten mit Zitat      
Hallo,

so kommst Du nie aus der while-Struktur raus, solange p.aD==0 bleibt. Vielleicht besser so:


Code:
while p.aD==0 && h >=0
         
  F_N= ((2/3)*p.E*(sqrt(p.r_12))*h.^(3/2)-p.F_H0);
  end

 
end


und danach abfragen, was genau passiert ist:

Code:


Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
grueßdichmeiner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 16.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2011, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

danke für die schnelle Antwort; allerdings hatte ich das:
Code:

while p.aD==0 && h >=0
         
  F_N= ((2/3)*p.E*(sqrt(p.r_12))*h.^(3/2)-p.F_H0);
  end
 


bereits probiert.
Irgendwie kommt dann folgende Fehlermeldung:
??? Operands to the || and && operators must be convertible to logical scalar values.

Error in ==> Viskoelastischer_Stoss_Hauptprogramm at 126
while p.aD==0 && h >=0

Liegt das an meiner Version?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.12.2011, 14:21     Titel:
  Antworten mit Zitat      
Hallo

Was hast du denn für Matlab Version?
Private Nachricht senden Benutzer-Profile anzeigen
 
Wall-E
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 21.06.11
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 07.12.2011, 15:24     Titel:
  Antworten mit Zitat      
Probiers mal mit
Code:
while p.aD==0&h>=0
(Also nur ein &)

Kann es sein dass sich h und p.aD nie ändern?
Weil sonst kommst du ja gar nicht aus der Schleife raus oder?
Fallls dem nicht so ist lass ich mich gern korrigieren...

gruß Wall-E
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: 07.12.2011, 19:01     Titel:
  Antworten mit Zitat      
Hallo grueßdichmeiner,


F_N= ((2/3)*p.E*(sqrt(p.r_12))*h.^(3/2)-p.F_H0);
end
[/code]

Die Meldung:
Zitat:
??? Operands to the || and && operators must be convertible to logical scalar values.

bedeutet, dass in
Code:
while p.aD==0 && h >=0

entweder p.aD oder h ein Vektor ist - oder beide.
Dann hilft es je nach Bedarf ein "any" oder "all" einzufügen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 16.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2011, 10:55     Titel:
  Antworten mit Zitat      
Hallo,

also h ist ein Vektor der periodisch das vorzeichen ändert, ich möchte allerdings nur berechnungen durchführen, bis h den ersten negativen wert annimmt, das wäre also nur ein Durchlauf.

Das p.aD soll vom Anwender des Programms angegeben werden... das mache ich über den input-Befehl und klappt auch gut.

Ich habe MATLAB 7.11.0 (R2010b)
Private Nachricht senden Benutzer-Profile anzeigen
 
grueßdichmeiner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 16.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2011, 11:05     Titel:
  Antworten mit Zitat      
Also ich habs jetzt auch noch mal mit any probiert, aber irgendwie fährt er sich da immer dran fest.

Falls jemand ne Idee hat, wie man das Problem anders lösen kann, dann nehme ich natürlich auch gerne andere Tipps an!
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: 09.12.2011, 11:44     Titel:
  Antworten mit Zitat      
Hallo grueßdichmeiner,

Es ist immer hilfreicher, wenn Du einen lauffähigen Ausschnitt aus Deinem Code postest, die alle relevanten Variablen definiert. Eine Fehlerbeschreibung wie "irgendwie fährt er sich da immer dran fest" erlaubt es nicht, einen konkreten Verbesserungsvorschlag zu machen. Gibt es eine Fehlermeldung - welche? Stimmt das Ergebnis nicht mit den Erwartungen überein?

Wenn h ein Vektor ist, musst Du auf die einzelnen Elemente zugreifen. Dazu benötigst Du etwas wie "h(i)", wobei i der Index zwischen 1 und der Länge von h ist.

Je konkreter die Frage ist, desto weniger Zeit geht mit Raterei verloren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 16.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2011, 12:02     Titel:
  Antworten mit Zitat      
Hallo,

Leider habe ich keine Fehlermeldung oder Ergebnisse aus dem obrigen Quelltext; MATLAB rechnet einfach ewig rechnet und dann nicht mehr reagiert.
Also ich habe mir für mein Problem jetzt noch was anderes überlegt,
ich lösche alle negativen Werte für h aus dem Vektor h.
Das mache ich mit:

Code:

if p.aD==0
     h = h(h >= 0)
     
     

           
  F_N= ((2/3)*p.E*(sqrt(p.r_12))*h.^(3/2)-p.F_H0);
  end

 


Das funktioniert auch und leifert mit für F_N die gewünschten Werte.

Allerdings hab ich jetzt das Problem, dass ich damit meinen Vektor h verkürze. Ich habe noch einen zweiten Vektor v, den ich über h auftragen will. Beide Vektoren haben ich in einer Matríx y zusammengefasst. Jetzt bräuchte ich einen Befehl mit dem ich aus der Matrix y die zu h gehörenden Werte für v auch löschen kann, damit ich v über h plotten kann.
(h ist die erste spalte von y und v die zweite)

Wie kann ich das machen?
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: 09.12.2011, 12:29     Titel:
  Antworten mit Zitat      
Hallo grueßdichmeiner,

Ich verstehe immer noch nicht, was Du eigentlich machst. Das Posten von lauffähigem Matlab-Code wäre wirklich sehr viel einfacher zu lesen, als eine Text-Beschreibung.

Ich rate aber trotzdem mal, was vielleicht helfen könnte:
Code:

index = (h >= 0);
h = h(index);
v = v(index);

Wenn Du also h anpasst, kannst Du auch v anpassen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 16.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2011, 12:41     Titel:
  Antworten mit Zitat      
Hallo Jan,

das war genau der Befehl den ich brauchte,
funktioniert super!

DANKE
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.