Matlab zu blöd zum rechnen/vergleichen? :D |
05.01.2012, 13:04 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
Matlab zu blöd zum rechnen/vergleichen? :D Wo das Problem liegt, hab ich mittlerweile eingrenzen können. Der Vektor u wird untersucht und bei der Abfrage if u(2) >= -u(1) z=1 else z=-1 end liefert mir Matlab -1?! Ich zweifel gerade am meinem Verstand, aber wenn ich mich nicht täusche, ist u(2) = -0.02 >= -(0.02) = -u(1), was zu z=1 führen sollte?! Kann mir jemand helfen, wo das Problem hier liegt?! Besten Dank schonmal! |
||||||||||||
05.01.2012, 13:09 | Math1986 | Auf diesen Beitrag antworten » | ||||||||||
RE: Matlab zu blöd zum rechnen/vergleichen? :D Liefert hier z=1. Du musst in der ersten Komponente ein Dezimalpunkt statt eines -kommas setzen. |
||||||||||||
05.01.2012, 13:11 | Cel | Auf diesen Beitrag antworten » | ||||||||||
Auch Octave spuckt ein z=1 aus. |
||||||||||||
05.01.2012, 13:13 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
RE: Matlab zu blöd zum rechnen/vergleichen? :D
ja, hab ich in Matlab auch, hab mich hier nur verschrieben. |
||||||||||||
05.01.2012, 13:18 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Da das Programm an sich wie gewünscht funktionieren sollte, können wir dir nur weiterhelfen, wenn du genau den Code lieferst, den du ausführst – inklusive deiner exakten Eingabe von u. Verwende dazu bitte die code-Tags im Forum. air |
||||||||||||
05.01.2012, 13:23 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
hm, ich hab mal eben nen Screenshot gemacht, damit ihr nicht denkt, ich sei völlig bescheuert reicht das so? hab zur Verdeutlichung nochmal u(1) usw ausgeben lassen, damit man sieht, dass die Werte richtig sind.
*edit* Die Menge D hab ich jetzt wie folgt eingegeben:
und das u ergibt sich dann aus der zweiten Spalte abzüglich der ersten Spalte. Also Rundungs/Darstellungsfehler dürften hier keine sein |
||||||||||||
Anzeige | ||||||||||||
|
||||||||||||
05.01.2012, 13:24 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
ist eine Zuweisung der Variable, die in if-Statements verboten ist. Du meintest vermutlich den Vergleichsoperator "==". Edit: Im Screenshot stimmt's allerdings. Moment. air |
||||||||||||
05.01.2012, 13:28 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
ja sry. Da wollt ich grad ausprobieren, was bei "=" und ">" seperat rauskommt |
||||||||||||
05.01.2012, 13:31 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Die Ausgabe passt nun aber doch zum Programm. u(2) >= u(1) ist eben nicht wahr. Im Ausgangsbeitrag hast du jedoch
geschrieben. Soll da nun ein Minus sein oder nicht? air |
||||||||||||
05.01.2012, 13:32 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
das minus is korrekt, also u(2) >= -u(1) ich schreib gleich nochmal alles übersichtlich, sorry fürs Durcheinander hier |
||||||||||||
05.01.2012, 13:34 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Wenn das Minus dann auch im Programm steht erscheint bei mir die korrekte Ausgabe. air |
||||||||||||
05.01.2012, 13:40 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
Also, zuerst hab ich die Menge D explizit eingegeben:
Der Vektor u berechnet sich dann aus 2. Spalte minus 1. Spalte also Jetzt lautet der Matlab-Code:
und Matlab liefert mir wie gesagt was ja eigentlich nicht sein kann, da und damit auch >= Meine Matlab-Ergebnisse hab ich auch nochmal angehängt ... |
||||||||||||
05.01.2012, 13:51 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Da scheint es zu leichten Rechenungenauigkeiten zu kommen. Tipp u mal direkt ein durch
und schaue, ob es dann richtig ist. Bei mir taucht der Fehler dann nicht mehr auf. In diesem Sinne schafft
Abhilfe. Allerdings bin ich auch irritiert, dass es bereits hier zu solchen Rechenungenauigkeiten kommt. air |
||||||||||||
05.01.2012, 13:58 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
wenn ich u explizit eingebe, wie dus mir gesagt hast, kommt das richtige (z=1) raus ... Matlab "verrechnet" sich dann bei der Berechnung von u oder wie ist der Fehler zu verstehen? Danke für die schnelle und erfolgreiche Hilfe ich hät da jetzt locker noch ne Woche mit verbracht |
||||||||||||
05.01.2012, 14:12 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Du kannst den Unterschied sehen, wenn du dir einfach
ausgeben lässt. Bei der direkten Eingabe von u ist das glatt Null, bei der Bildung von u über die Spaltendifferenz von D ist es eben nur ein sehr kleiner Wert (kleiner als eps). An sich ist das ein numerisch typischer Effekt. Ich bin aber verblüfft, dasss der bereits bei dieser simplen Differenzbildung auftritt. air |
||||||||||||
05.01.2012, 14:20 | Maddin17 | Auf diesen Beitrag antworten » | ||||||||||
stimmt, da kommt tatsächlich nicht 0 heraus na gut, dann geb ich mich an dieser Stelle zufrieden ... mit den "-eps" kommt dann auch das richtige Ergebnis raus Danke ein letztes mal |
||||||||||||
05.01.2012, 21:10 | Calvin | Auf diesen Beitrag antworten » | ||||||||||
Das liegt vermutlich daran, dass eine der beteiligten Zahlen im IEEE754-Format eine periodische Darstellung hat. Damit kommt es zu Rundungsfehlern. Das macht den Vergleich von Komma-Zahlen auf Gleichheit so schwierig. Man ist auf den "Trick" mit dem epsilon quasi angewiesen. |
||||||||||||
05.01.2012, 21:18 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Dass es zu solchen Fehlern kommt ist mir ja klar. Aber sollte nicht wenigstens so etwas simples wie 0.98 - 1 auch exakt berechnet werden können? Da Matlab alle Zahlen als Doubles speichert, müsste ich ja auch bei Vergleichen wie
befürchten, dass sie schiefgehen? air |
||||||||||||
05.01.2012, 21:52 | chrizke | Auf diesen Beitrag antworten » | ||||||||||
Bei diesem Beispiel nehme ich an, dass intern integers verwendet werden. |
||||||||||||
05.01.2012, 21:59 | Calvin | Auf diesen Beitrag antworten » | ||||||||||
Nicht alles, was für den Mensch simpel ist, ist es auch für den Computer. Schaue dir mal die Seite http://www.h-schmidt.net/FloatApplet/IEEE754de.html an. Da ist beschrieben, dass schon die "simple" Zahl 0,1 von einem Computer nicht exakt gespeichert werden kann. Ist übrigens kein Matlab-Problem. In Java kommt auch nicht der erwartete Wert raus.
|
||||||||||||
05.01.2012, 23:03 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Matlab speichert alle Werte ausnahmslos als Doubles. Das ist jedenfalls ihre eigene Angabe. @ Calvin Vielen Dank. Da muss man ja glatt noch weit besser aufpassen, als ich dachte. air |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|