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

If-Abfrage mit Zahlen kleiner 1 funktioniert nicht

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2015, 08:21     Titel: If-Abfrage mit Zahlen kleiner 1 funktioniert nicht
  Antworten mit Zitat      
Hallo,

ich habe ein kleiner Problem mit einer if-Abfrage und verstehe überhaubt nicht wieso es nicht funktioniert.

Also, die folgende if-Abfrage ist in meinem Programm enthalten und macht irgendwie nicht so ganz das, was sie soll:

Code:
%
r = 0.08;
l = 0.1;
y_s = -0.02;

if r > l
    aa = NaN;
elseif (l-r) <= abs(y_s)
    aa = NaN;
else
    aa = 1;
end
 


Normalerweise müsste Matlab hier in die zweite Bedingung springen, da hier die Bedingung mit 0.02 = 0.02 erfüllt ist. Bei mir springt Matlab hier allerdings immer in die dritte Bedingung, sprich aa = 1.

Wisst ihr vielleicht woran das liegen könnte?
Setze ich z. B. für r=80, l=100 und y_s=-20 funktioniert das Ganze so wie es soll.

Vorab vielen Dank für eure Hilfe.

Ich nutze übrigens Matlab 2014a.


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.08.2015, 08:36     Titel:
  Antworten mit Zitat      
Hallo,

das Problem liegt wohl an der Reihenfolge der Bedingung. Kehre ich sie um...

Code:

elseif abs(y_s) <= (l-r)
 


funktionert dein Bsp. Allerdings habe ich dafür keine Erklärung. Da können dir aber sicherlich die Matlabcracks Harald und JanS weiterhelfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2015, 08:49     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort.

Wenn man die Reihenfolge der Bedingung vertauscht, muss aber auch der logische Ausdruck umgekehrt werden.

Code:

elseif abs(y_s) >= (l-r)
 


Und dann funktioniert es leider immer noch nicht Sad
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.08.2015, 09:33     Titel:
  Antworten mit Zitat      
ungenauigleiten bei der darstellung von dezimalzahlen. deine == bedingung ist nicht erfüllt. 0.1-0.08 ist halt nicht genau 0.02 da 0.1 zb nicht ordentlich binär dargestellt wird. tolleranzen könnten hier helfen.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2015, 11:47     Titel:
  Antworten mit Zitat      
Ok. Das war mir nicht bewust, dass das Ergebnis von l-r nicht exakt ausgegeben wird.

Ich konnte das Problem jetzt folgendermaßen lösen:

Code:

elseif round((l-r)*100)/100 <= abs(y_s)
 


So funktioniert es jetzt Cool
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.08.2015, 19:32     Titel:
  Antworten mit Zitat      
ich finde es besser mit tolleranzen zu rechnen.
Code:
wobei du dann deine tolleranz selber festlegst.
_________________

richtig Fragen
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.