|
|
Warum wird If Anweisung ausgeführt? |
|
Grünschnabel |

Forum-Fortgeschrittener
|
 |
Beiträge: 80
|
 |
|
 |
Anmeldedatum: 01.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2013a
|
 |
|
|
 |
|
Verfasst am: 26.06.2015, 11:38
Titel: Warum wird If Anweisung ausgeführt?
|
 |
|
 |
|
Liebe Community,
der Fehler liegt natürlich beim Anwender (also an mir) aber ich weiß nicht warum folgere if-Anweisung ausgeführt wird obwohl die if-Anweisung m. e. erfüllt ist. Kann mir jemand weiterhelfen, bzw. Tipps geben?!?
Der Printout beim Commant Window sieht wie folg aus:
Zitat: |
i1 Check 2.55 CurrTimeStep 2.55
i3 Check 2.55 CurrTimeStep 2.55
i5 Check 2.55 CurrTimeStep 2.55
i7 Check 2.55 CurrTimeStep 2.55
i9 Check 2.55 CurrTimeStep 2.555
Erhöht Check
i11 Check 2.555 CurrTimeStep 2.555
Erhöht Check
i13 Check 2.56 CurrTimeStep 2.555
Erhöht Check
i15 Check 2.565 CurrTimeStep 2.555
Erhöht Check
i17 Check 2.57 CurrTimeStep 2.56
Erhöht Check
i20 Check 2.575 CurrTimeStep 2.56
Erhöht Check
i23 Check 2.58 CurrTimeStep 2.56
Erhöht Check
i26 Check 2.585 CurrTimeStep 2.56
Erhöht Check
i29 Check 2.59 CurrTimeStep 2.565
Erhöht Check
i32 Check 2.595 CurrTimeStep 2.565
Erhöht Check
i35 Check 2.6 CurrTimeStep 2.565
Erhöht Check
i38 Check 2.605 CurrTimeStep 2.565
Erhöht Check |
Bei i=9 Check (2,55) ~= CurrTimeStep (2,555) wird die if-Anweisung ausgeführt. Check wird erhöht. RICHTIG!
Ab jetzt wird die if-Anweisung immer erhöht. Warum ?
M.E. ist die if-Anweisung z.b. für i = 11 erfüllt. Check (2,555) = CurrTimeStep (2,555) und somit soll Check nicht erhöht werden.
Habt Ihr irgendwelche Ideen?!?
Vielen Dank im Voraus.
Der Grünschnabel
Beschreibung: |
|
 Download |
Dateiname: |
Testfile_3.txt |
Dateigröße: |
7.8 KB |
Heruntergeladen: |
401 mal |
|
|
|
|
|
laternenjoe |

Forum-Fortgeschrittener
|
 |
Beiträge: 83
|
 |
|
 |
Anmeldedatum: 25.02.15
|
 |
|
 |
Wohnort: Bochum
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.06.2015, 12:41
Titel:
|
 |
Du kannst doch besser, schnell debuggen und so nachvollziehen, warum die ausgeführt wird, oder?
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 26.06.2015, 13:06
Titel:
|
 |
Klassischerweise sehr kleine numerische Differenzen. Einfach mal vor der if Anweisung
ausgeben lassen, und wahrscheinlich wird es statt da wo Null erwartet wird irgenwas mit 10^-16 sein.
Andreas
|
|
|
Grünschnabel |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 80
|
 |
|
 |
Anmeldedatum: 01.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2013a
|
 |
|
|
 |
|
Verfasst am: 26.06.2015, 13:37
Titel:
|
 |
Hallo Andreas,
du hast vollkommen recht!!!!
Ich bekomme kleine Unterschiede in Zahlen. Wie kann ich das Problem vernünftig lösen?
Vielen Dank im Voraus.
Der Grünschnabel
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 26.06.2015, 14:08
Titel:
|
 |
Freut mich Das "Richtige" hängt von der Anwendung ab. Mancher Trick ist nämlich sehr risikoreich. Es gilt zu verstehen wo diese Effekte herkommen und je nach Applikation (wird da mal C Code draus generiert) muss man gewisse Dinge berücksichtigen.
Der einfachste Weg ist aber statt == oder ~= mit Toleranzbereichen zu arbeiten. "Ist der *Betrag* der Differenz kleiner als ein geeigneters Vielfaches von EPS, definiere ich es als Null".
Andreas
|
|
|
Grünschnabel |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 80
|
 |
|
 |
Anmeldedatum: 01.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: MATLAB R2013a
|
 |
|
|
 |
|
Verfasst am: 26.06.2015, 14:31
Titel:
|
 |
Super Andreas,
vielen Dank für den Hinweis!!! Es scheint zu funktionieren. Vollständigkeitshalber setze ich noch einmal den Code mit den richtigen Ergebnissen rein.
Vielen Dank und ein schönes Wochenende.
Der Grünschnabel
|
|
|
|
|
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.
|
|