|
|
Wieso wird die if-Bedingung ignorriert ? |
|
nemax |
Forum-Anfänger
|
|
Beiträge: 28
|
|
|
|
Anmeldedatum: 13.03.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 14:31
Titel: Wieso wird die if-Bedingung ignorriert ?
|
|
Hallo,
kann mir hier jemand schnell sagen, wieso die if-Bedingung ignorriert werden kann.
Ich habe folgendes eingetragen:
Zitat: |
K = ....;
if d~=0
K = K + .....;
end |
jedoch wenn ich den Debugger zur Überprüfung der Werte verwende, stelle ich fest, dass trotz d=0 K in dem if-Satz berechnet wird.
Kann mir jemand einen Tipp dazu geben ?
|
|
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 22.07.2009, 15:20
Titel:
|
|
Hallo,
Es könnte z.b Daran liegen:
1) Dass d kurz vor IF-Bedingung überschrieben wird.
2) Dass d ein anderes Datentyp hat, z.B String
Sonst sieht die Bedingung richtig aus, vielleicht muss du Schritt für Schritt debuggen, um Fehler zu finden.
Und probiere noch in Debug-Modus
setze Haltepunkt direkt auf IF-Bedingung
und dann von Hand d auf 0 setzen,
Läuft es immer noch in IF rein
|
|
|
Titus |
Forum-Meister
|
|
Beiträge: 871
|
|
|
|
Anmeldedatum: 19.07.07
|
|
|
|
Wohnort: Aachen
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 15:20
Titel:
|
|
Ich glaube schon ... .
Wenn d=0 ist, ist d~=0 ("d ungleich null") wahr. Oder wolltest Du eigentlich
schreiben?
Titus
|
|
|
Idefix_1024 |
Forum-Century
|
|
Beiträge: 230
|
|
|
|
Anmeldedatum: 16.10.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 15:29
Titel:
|
|
gib doch mal an was genau nicht funktioniert...
hier mal ein Beispiel
bei d = 0 erfolgt eine Abarbeitung des ELSE
bei d = 1 erfolgt eine Abarbeitung des IF
klappt wundaba
|
|
|
nemax |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 28
|
|
|
|
Anmeldedatum: 13.03.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 17:30
Titel:
|
|
Zuerst mal danke an alle für die Tipps.
Ich habe den Fehler in dem Code beseitigt, der mich an eine Fehlinterpretation des if-Satzes denken ließ. Musste zwar sehr lange suchen, aber so ist es eben.
Nochmals danke
|
|
|
nemax |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 28
|
|
|
|
Anmeldedatum: 13.03.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 17:43
Titel:
|
|
Ah ja , ich habe noch eine Folgefrage zu Datentyp der Variablen.
Wenn ich eine Substration durchführe :
Zitat: |
C = A - B;
mit folgenden Zahlen
2.2500e-006 = 2.2500e-006 - 1.0604e-024 |
sieht man , dass C anscheinend gerundet wird. Ich brauche aber einen exaktem Ergebnis - ohne der Rundung.
Was kann ich dafür tun ? Muss ich den Datentyp der Variablen ändern, wie kann ich es umsetzen ?
|
|
|
Idefix_1024 |
Forum-Century
|
|
Beiträge: 230
|
|
|
|
Anmeldedatum: 16.10.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 19:46
Titel:
|
|
leider ist es nunmal so, dass jede Variable begrenzte Speicherbereiche zur Verfügung hat... dadurch wird das Problem bei derart kleinen oder auch großen Zahlen niemals völlig behoben sein...
Die Einzige Möglichkeit die mir da einfallen würde ist, selbst geschickt zu Normieren.
Da es meist aber auch gar nicht auf die 20-te Nachkommastelle ankommt würde ich auch überlegen das Ergebnis zu runden... je nach Anwendung
Runden mit den Befehlen
|
|
|
nemax |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 28
|
|
|
|
Anmeldedatum: 13.03.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2009, 20:12
Titel:
|
|
Dh. man kann da rein garnichts tun ? Es gibt in Matlab keine Option, die es erlaubt die Genauigkeit der Nachkommastelle zu bestimmen ?
|
|
|
Titus |
Forum-Meister
|
|
Beiträge: 871
|
|
|
|
Anmeldedatum: 19.07.07
|
|
|
|
Wohnort: Aachen
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.07.2009, 10:21
Titel:
|
|
Hallo,
nein, außer man weicht auf die Symbolic Toolbox von MATLAB aus. Diese kann mit (im Prinzip) beliebiger Anzahl Stellen arbeiten.
Das von Dir angesprochene Problem stellt sich üblicherweise durch die Verwendung ungeeigneter Algorithmen für das vorgegebene Problem. Wenn Du uns schreibst, warum diese Rechnung für Dich "wichtig" ist, vielleicht kann jemand weiterhelfen ...
Ciao,
Titus
|
|
|
Andy386 |
Forum-Guru
|
|
Beiträge: 485
|
|
|
|
Anmeldedatum: 24.06.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.1/8
|
|
|
|
|
|
Verfasst am: 25.07.2009, 19:36
Titel:
|
|
nemax hat Folgendes geschrieben: |
Dh. man kann da rein garnichts tun ? Es gibt in Matlab keine Option, die es erlaubt die Genauigkeit der Nachkommastelle zu bestimmen ? |
double bestimmt das in deinem Fall (15). single hätte dann nur die halbe (7) und intXX gar keine. Hat nix mit Optionen zu tun, sondern damit, wie Daten im RAM abgelegt werden. wenn du nur Additionen machst, kannst du dir sicher ne eigene Klasse basteln... oder lieber gleich die symbolic toolbox nutzen
|
|
|
nemax |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 28
|
|
|
|
Anmeldedatum: 13.03.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.07.2009, 13:07
Titel:
|
|
Dankeschön für den Tip mit der Symbolic Toolbox. Habe diese noch nie verwendet, merke mir aber diese für die Zukunft.
Mein Genauigkeitsproblem habe ich über eine behelfsmässige Stütze gelöst, in dem ich die erfordeliche mathematische Operation ersts nach dem Erreichen der relativen Differenz von E-015 zulasse.
Mit dem Ergebis kann ich jetzt noch leben. Künftig werde ich auf die Symbolic Toolbox zurück greifen.
Nochmals Danke
|
|
|
|
|
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 - 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.
|
|