|
|
[Ausgabeoptionen] Zahlen in der Darstellung verändern |
|
shalec |

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.05.2014, 12:02
Titel: [Ausgabeoptionen] Zahlen in der Darstellung verändern
|
 |
|
 |
|
Hallo,
vorweg: ich bin ein absoluter Neuling in Matlab, kenne aber viele andere CAS (wie Sage, Pari Matcat (?)..)
Ich arbeite mit der R2014a + Simulink Version für Studenten, vorher hatte ich mal Octave mit Notepad ++ als Editor.
Nun zur Frage:
Ich soll eine Funktion arithmetik(z,n) erzeugen, die eine beliebige reelle Zahl z mit n Nachkommastellen ausgibt. Das Vorzeichen und die nachfolgenden Zehnerpotenzen sollen erhalten bleiben.
Vorweg: Zahlen in Matlab (64bit) lassen sich nur bis 16 (oder 17?) Nachkommastellen darstellen. Theoretisch sollten 19 möglich sein (floor(log10(2^64))). Daher werden fehlende Stellen einfach mit einer 0 aufgefüllt. Die Mantisse soll erhalten bleiben.
Meine Idee war nun die Zahl z in Strings zu zerlegen. Das Zeichen vor der ersten Zahl (idR wird hier wohl nur ein "-" auftauchen) lässt sich einfach Produzieren if z<0 .. String1='-'; z=abs(z); zum Weiterarbeiten.
Im neuen "z" möchte ich nach einem Komma suchen, dazu habe ich bereits gesehen, dass es eine Funktion "find(String== 'das Gesuchte')" gibt. Wenn ich hier einen String einlesen lasse (ZahlString=num2str(rand(1),17))
Erhalte ich diese Ausgabe. Daher würde ich gerne wissen, welchen Datentyp diese Funktion find fordert?
Alternativ: Gibt es bereits Funktionen, die das gewünschte erfüllen? Dann könnte ich mir das in der Doku angucken. Googeln hat nichts gebracht.
Eine andere Idee war es, die Zahl Letterweise in einen Array/Vektor einzutragen. Dort dann über eine for-Schleife und eine If-Abfrage die einzelnen Letter untersuchen.
Dies ist allerdings sehr Zeit~optimiert (Verneinung! ^^) Die notwendigen Vergleiche und der notwendige Speicherbedarf steht in keinem Verhältnis zum Nutzen.
Mein bisheriger Code sieht zunächst so aus:
Das löst die Aufgabe nur indirekt. Gefordert sind tatsächlich n Nachkommastellen, für beliebiges n.
Vielen Dank schonmal im Voraus!
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 08.05.2014, 12:26
Titel:
|
 |
hift dir
unter format spec kann man angeben wie das dann aussehen soll.
_________________
richtig Fragen
|
|
|
shalec |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.05.2014, 20:31
Titel:
|
 |
|
 |
|
Hallo, ich habe nun beim Edit die weiteren Fragen fett markiert und meinen Code eingefügt.
Winkow hat Folgendes geschrieben: |
hift dir
unter format spec kann man angeben wie das dann aussehen soll. |
Ahh..super danke.
Nachdem ich nun mehrmals die Seite durchgelesen habe, bin ich auch auf das richtige gekommen:
Zitat: |
('%6.4f', pi) is equivalent to ('%*.*f', 6, 4, pi). |
hat mich dahin geführt:
Diese Ausgabe kann ich nun optimieren. Vielen Dank!
Nun stehe ich vor einem weiteren Problem:
Die Zahl soll so ausgegeben werden, wie sie eingegeben wird. Es sollen nur entsprechend viele Nachkommastellen angezeigt werden.
Ich habe nun den Code:
so geändert. Gibt es eine Möglichkeit die Vorkommastellen anzeige beliebig zu lassen? (d.h. wenn 10^23 + pi dargestellt werden soll, dass der dann auch 10^23 als tatsächliche Zahl ohne Potenz darstellt?)
Also jede Eingabe der Zahl soll unverändert bleiben. Die einzige Aufgabe ist es, die Sichtbarkeit der Zahlen nach dem Komma zu erzeugen und ggf. Nullen anzuhängen.
Noch eine Frage:
Meine Ausgabe ist nun diese:
woher kommt die 57? (es sind 57 Zeichen, aber womit sage ich dem, dass der das Zählen soll?) Auch weiß ich nicht, warum der die 57 überhaupt ausgibt?
Hier auch meine bisherige Testfunktion:
Und wo liegt der Unterschied zwischen %i, %g und %e? Bei "pi" stelle ich keinen fest.
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 08.05.2014, 22:29
Titel:
|
 |
hallo. du musst den format spec zusammen abhängig von deinem n wenn ich dein problem richtig verstanden hab.
_________________
richtig Fragen
|
|
|
shalec |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.05.2014, 08:31
Titel:
|
 |
Winkow hat Folgendes geschrieben: |
hallo. du musst den format spec zusammen abhängig von deinem n wenn ich dein problem richtig verstanden hab. |
Den formatSpec habe ich in Abhängigkeit von meinem n erzeugt.
Durch fprintf(%1.*e, n, z) teile ich dem doch mit, dass die Nachkommastellen von einer Variablen abhängig sind (n). Durch das e erzeuge ich eine Exponentialdarstellung.
Das Problem ist folgendes:
Wenn ich eine Zahl "123456789.987654321" eingebe, erscheint "1.23456789987654321 e+08". Diese 10er Potenzdarstellung soll aber nur erscheinen, wenn ich eine solche auch vorgegeben habe. Anderenfalls sollen die Vorkommastellen erhalten bleiben. Gibt es hierfür auch eine Option?
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 09.05.2014, 08:36
Titel:
|
 |
Zitat: |
Den formatSpec habe ich in Abhängigkeit von meinem n erzeugt. |
nein.
dein format spec in deinem code ist :
da ist keine n abhängigkeit drin.
sowas zum beispiel wäre glaube ich eine abhängigkeit von n:
_________________
richtig Fragen
|
|
|
shalec |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 34
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.05.2014, 08:51
Titel:
|
 |
Winkow hat Folgendes geschrieben: |
Zitat: |
Den formatSpec habe ich in Abhängigkeit von meinem n erzeugt. |
nein.
dein format spec in deinem code ist :
da ist keine n abhängigkeit drin.
sowas zum beispiel wäre glaube ich eine abhängigkeit von n:
|
Wird durch das * nicht auf einen Platzhalter hinter dem Komma verwiesen? Denn aus der Doku habe ich
Zitat: |
('%6.4f', pi) is equivalent to ('%*.*f', 6, 4, pi). |
d.h. dass eine Angabe wie Deine äquivalent zu meiner ist. Allerdings habe ich hier nicht "%*.*" sondern "%1.*", damit erwartet er ein Argument nach der Klammer, welches eine Zahl sein darf (nur natürliche Zahlen..)
Aber ok. Mein formatSpec ist in keiner Abhängigkeit erzeugt. Ich greife nur in fprintf auf das "*" zu, durch den Eintrag hinter dem Komma.
Aber würde das tatsächlich die Vorkommaproblematik lösen? Die Nachkommastellen werden gut angezeigt. Ich probiere es mal.
Danke schonmal
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 09.05.2014, 09:35
Titel:
|
 |
oh du hast recht. den teil hatte ich vergessen
_________________
richtig Fragen
|
|
|
|
|
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.
|
|