|
|
Stufen Plot, Rundungsfehler |
|
Gigastorm |
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 07.10.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.10.2015, 17:47
Titel: Stufen Plot, Rundungsfehler
|
|
Wie kommt es durch den unten angegebenen Code zu diesem komischen Plot?
Per Hand wäre jede f(i)-Koordinate 1,
aber in Matlab ist f(1)=0, f(letze)=1.111..
Meine Frage ist nun wie Matlab auf diesen stufigen Plot kommt?
LG
|
|
|
|
|
Epfi |
Forum-Meister
|
|
Beiträge: 1.134
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.10.2015, 17:56
Titel:
|
|
Darum?
EDIT (20:26): Kommentar aus Code entfernt
Zuletzt bearbeitet von Epfi am 18.10.2015, 19:27, insgesamt einmal bearbeitet
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.10.2015, 17:57
Titel:
|
|
Hallo,
schau dir doch Zähler und Nenner getrennt an, dann wird es klarer. Knapp unter 1 ist eben durch die Verwendung von Gleitkommazahlen die Auflösung höher als knapp über 1.
Grüße,
Harald
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 18.10.2015, 18:00
Titel: Re: Stufen Plot, Rundungsfehler
|
|
Hallo Gigastorm,
Wie in Deinem anderen Thread bereits angesprochen, sind diese Effekte genau wso, wie man sie beim Rechnen mit IEEE754 doubles erwartet. Das liegt also nicht an Matlab, sondern an dem sehr weit verbreiteten Standard zur Darstellung von Gleitkomma-Zahlen.
Insofern ist der Plot nicht "komisch".
Warum der erste Wert 0 ist und nicht 1 sollte nach der Beantwortung Deines anderen Threads klar sein: (1e-16 + 1) - 1 ist 0 und nicht 1e-16.
Genauso lässt sich weiter argumentieren für die anderen Werte. Die Rundungen führen dazu, dass die Werte abgeschnitten werden. Dieser Effekt ist bei der Implementierung numerischer Codes sehr wichtig und es gibt sehr viel Literatur zu diesem Thema. Siehe:
https://de.wikipedia.org/wiki/Gleitkommazahl
http://wiki.selfhtml.org/wiki/Progr.....technik/Rechnerarithmetik
usw.
Gruß, Jan
|
|
|
Gigastorm |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 14
|
|
|
|
Anmeldedatum: 07.10.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.10.2015, 00:54
Titel:
|
|
Danke für die Antworten. Habe mir die Artikel durchgelesen.
Aber ich sehe noch immer nicht ein,wieso als 1 interpretiert wird aber anscheinend nicht. Woran steckt das bei der Runden der Binärzahlen?
Ich versuch gerade zu verstehen wie man auf kommt:
Ich weiß ich rechne hier in Dezimalcode und die Rechensysteme in Binärcode. Aber ich wüsste nicht wie ich dem besser auf den Grund gehe?
Da die Dezimalzahlen in Binärdarstellung umgewandelt werden, werden die Nachkommestellen schon viel früher abgeschnitten.
Also ist es per Hand gar nicht möglich die Werte die Matlab in den Bsp. ausgibt genau nachzuvollziehen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 19.10.2015, 08:49
Titel:
|
|
Hallo,
Zitat: |
Also ist es per Hand gar nicht möglich die Werte die Matlab in den Bsp. ausgibt genau nachzuvollziehen? |
Möglich ist es natürlich. Man muss allerdings ganz genau darauf achten, dass man die Binärdarstellung richtig hinbekommst und dann auch noch die Arithmetik.
Ich kann dir nur empfehlen, dir die Graphen von Zähler und Nenner separat anzusehen. Siehe auch dein anderer Thread.
Grüße,
Harald
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 19.10.2015, 10:13
Titel:
|
|
Hallo Gigastorm,
Zitat: |
... als 1 interpretiert wird aber anscheinend nicht |
Weil 1.2e-16 offensichtlich eine Binär-Darstellung hat, die nicht mehr außerhalb der des Bereiches liegt, bei dem bei 1.0 die Stellen wegfallen.
Man kann alle Ergebnisse der Double-Arithmetik auch von Hand nachvollziehen. Dazu muss man die Zahlen unbedingt zuerst korrekt ins Binärsystem übertragen, wie es in IEEE754 definiert ist. Danach sind die Ergebnisse eindeutig definiert und logisch. Die Arithmetik wird nicht von Matlab durchgeführt, sondern es werden die Floating-Point-Einheiten (bzw SSE) des Prozessors benutzt.
Gruß, Jan
|
|
|
|
|
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.
|
|