|
|
Stellen hinter dem Komma ermitteln |
|
der_leo |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 08.10.10
|
|
|
|
Wohnort: Kassel
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.10.2010, 16:30
Titel: Stellen hinter dem Komma ermitteln
|
|
Hallo Matlab-Gemeinde,
ich habe ein Problem:
Ich möchte in Matlab die Anzahl der Stellen hinter einem Komma ermitteln, damit ich die Zahl mit der entsprechenden 10ner Potenz multiplizieren kann.
Z.B.:
2.34564 * 10⁵ = 234564;
und ich muss auf irgendeine Weise den Exponenten (hier: 5) ermitteln.
Weiß jemand Rat?
Bin dankbar für jede Hilfe.
Gruß, Leo
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.10.2010, 18:21
Titel:
|
|
Hallo,
Vorschlag:
Mich würde die Anwendung interessieren. Muss das ganze auf einen Vektor angewendet werden? Wird der Faktor dann für jeden Wert einzeln bestimmt, oder ist der größte oder kleinste Faktor entscheidend?
Grüße,
Harald
|
|
|
der_leo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 08.10.10
|
|
|
|
Wohnort: Kassel
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.10.2010, 18:30
Titel:
|
|
Hi,
das ganz muss sowohl auf Matrizen, als auch auf Vektoren angewendet werden.
Und dabei interessiert mich dann der größte notwendige Exponent innerhalb der Matrix / des Vektors.
Vielen Dank für den Lösungsvorschlag.
Gruß, Leo
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.10.2010, 19:25
Titel:
|
|
Hallo,
eine Möglichkeit: Definiere
und dann
Wie effizient das für große Matrizen/Vektoren ist, ist wieder die andere Frage.
Grüße,
Harald
|
|
|
der_leo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 08.10.10
|
|
|
|
Wohnort: Kassel
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.10.2010, 20:57
Titel:
|
|
Hi,
ich werde einfach mal austesten, ob die Perfomance annehmbar ist.
Vielen Dank nochmal
Gruß, Leo
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 08.10.2010, 23:57
Titel:
|
|
Hallo Leo,
die oben genannte Methode wird oft funktionieren. Aber nicht immer.
Was erwartest Du für:
x = 1.999999999999999
Soll das als 2.0 behandelt werden?
Wie wäre es mit:
x = 1.000000000000001
Solche Zahlen treten auch bei harmlos aussehenden Funktionen auf:
Also müsstest Du eigentlich zunächst bei einer bestimmten Nachkommastelle runden, bevor Du feststellen kannst, ob bis zu einer (anderen) bestimmten Nachkommastelle gerundet wurde...
Numerisch gesehen in das Zählen von Nullen in der Dezimal-Darstellung einer Floatingpoint-Zahl, die intern binär gespeichert wird, nicht sinnvoll. Beim Umrechnen von binär nach dezimal gibt es Rundungsfehler, die ausgesprochen hartnäckig sind, sich also nicht mal eben weg-runden oder -schneiden lassen.
Woher stammt denn Deine Zahlen?
Kannst Du die binär-Werte benutzen (siehe TYPECAST und DEC2HEX)?
Gruß, Jan
|
|
|
Seban |
Forum-Meister
|
|
Beiträge: 600
|
|
|
|
Anmeldedatum: 18.01.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ab R2014b
|
|
|
|
|
|
Verfasst am: 14.01.2013, 19:39
Titel:
|
|
|
|
|
Hi,
Ich muss prüfen, ob Werte nicht mehr als 3 Nachkommastellen aufweisen. Dazu verwende ich diesen Ansatz von Harald (um eine if-Abfrage ergänzt, um Fehlermeldungen zu unterbinden, falls eine Zahl keine Nachkommastellen hat):
Harald hat Folgendes geschrieben: |
und dann
|
Ich stoße allerdings auf ein Problem: Manchmal werden nicht die Nachkommastellen ~= 0 gezählt, sondern auch Nullen. Die Zahlenwerte werden aus einer Excel-Datei eingelesen und dort steht bspw. 8.002. Matlab macht dann daraus (steht so im Variable Editor) 8.002000000000000 und gibt für y 15 aus. Bei einer anderen Zahl im gleichen Vektor im gleichen Funktionsaufruf gibt er korrekterweise 3 aus, obwohl sie im Variable Editor so angezeight wird: 10.058000000000000.
Wie kann ich diesen Rundungsfehlern (?) entgegentreten? So wird das Ergebnis ja verfälscht. Ich tippe auf eps, aber ich habe keine Idee, wie ich dies in diesem Fall einsetzen kann.
Grüße,
Seban
_________________
Richtig fragen
Debugging
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 14.01.2013, 20:22
Titel:
|
|
Hallo,
Alternative:
oder besser, um Rundungsfehler auszuschließen:
Grüße,
Harald
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 14.01.2013, 22:27
Titel:
|
|
Hallo Seban,
Bitte hänge eine neue Frage nicht an ein bestehendes Thema an.
Zitat: |
Ich muss prüfen, ob Werte nicht mehr als 3 Nachkommastellen aufweisen. |
Es gibt hier ein prinzipielles Problem, dass die Zahlen, die intern im Binär-Format gespeichert sind, nicht unbedingt eine exakte Representation im Dezimal-Format hat. Nun bleibt es zu definieren, ob 0.0029999999999999 nun 3 Nachkommastellen hat oder 15. Das ist gar nicht ohne weiteres entscheidbar.
Haralds Vorschlag ist dagegen ordentlich definiert, allerdings ist die Wahl der Toleranz nicht trivial.
Gruß, Jan
|
|
|
Seban |
Forum-Meister
|
|
Beiträge: 600
|
|
|
|
Anmeldedatum: 18.01.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ab R2014b
|
|
|
|
|
|
Verfasst am: 14.01.2013, 22:31
Titel:
|
|
|
|
|
Wieder mal vielen Dank, Harald
Edit:
Jan S hat Folgendes geschrieben: |
Bitte hänge eine neue Frage nicht an ein bestehendes Thema an. |
Sorry, dachte es passt hier perfekt rein, da es um das selbe Ausgangsproblem ging & ich Bezug auf einen Lösungsvorschlag genommen hab. Beim nächsten mal mach ich einen neuen Thread auf
Zitat: |
Es gibt hier ein prinzipielles Problem, dass die Zahlen, die intern im Binär-Format gespeichert sind, nicht unbedingt eine exakte Representation im Dezimal-Format hat. Nun bleibt es zu definieren, ob 0.0029999999999999 nun 3 Nachkommastellen hat oder 15. Das ist gar nicht ohne weiteres entscheidbar. |
Es ist in diesem Fall so, dass die Werte in der Excel-Datei bereits gerundet sind (sofern sie ursprünglich mehr als 3 Nachkommastellen hatten). Dh. aus ursprünglich 0.0029999999999999 wäre bereits vor dem einlesen in Matlab 0.003 geworden. Es geht also "nur" noch darum zu vermeiden, dass durch das Einlesen in Matlab Rundenungsfehler das Ergebnis verfälschen könnten.
(Ich prüfe in Matlab eigentlich nur auf Nachkommastellen, um zu vermeiden, dass jemand sich bei der Eingabe der Werte in Excel vertan hat.)
Zitat: |
Haralds Vorschlag ist dagegen ordentlich definiert, allerdings ist die Wahl der Toleranz nicht trivial. |
In meinem Fall sollte eps aber ausreichend sein, oder? Wie gesagt geht es ja nur darum Matlabs eigene Probleme beim Runden zu umgehen.
Dir auch vielen Dank für die Antwort.
_________________
Richtig fragen
Debugging
|
|
|
|
|
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.
|
|