home *** CD-ROM | disk | FTP | other *** search
- Plotter V3.71
- © by Rüdiger Dreier 1988/9/90
- Plotter ist FREEWARE
-
- DER AUTOR ÜBERNIMMT KEINERLEI HAFTUNG FÜR SCHÄDEN, DIE AUS DER SACH- ODER
- UNSACHGEMÄSSEN BENUTZUNG DES PROGRAMMS ENTSTEHEN !!
- WEITERHIN WIRD KEINE HAFTUNG FÜR DIE FEHLERFREIHEIT DES PROGRAMMS
- ÜBERNOMMEN !!
- BENUTZUNG AUF EIGENE GEFAHR !
-
- Der Plotter ist ein Programm zum zeichnen zweidimensionaler mathe-
- matischer Funktionen. Es können 10 Funktionen eingegeben und gezeichnet
- werden. Zusätzlich kann man sich von jeder Funktion die erste und zweite
- Ableitung zeichnen lassen (jeweils nummerisch oder symbolisch bestimmt).
- Es eignet sich zur Unterstützung bei Kurvendiskussionen, um die selbst
- errechneten Ergebnisse zu kontrollieren. Das Programm fertigt keine
- komplette Kurvendiskussion an.
-
- Anforderungen an die Rechnerkonfiguration:
-
- Das Programm läuft unter Kickstart 1.2 und 1.3, 512kB Speicher sollten
- mindestens vorhanden sein, besser mehr. Der Stack sollte mindestens 20000
- Bytes betragen, sonst kommt es zu leicht zu Abstürzen. Im logischen
- Device LIBS: müssen sich drei Libraries befinden:
- - mathieeedoubbas.library
- - mathieeedoubtrans.library
- - tool.library (in diesem Ordner enthalten)
-
- Die Menupunkte:
- C-Plot
- Genauigkeit
- Es erscheinen 3 SubMenuPunkte, mit denen die Genauigkeit auf klein,
- mittel oder groß gesetzt werden kann. Je genauer gezeichnet wird, desto
- mehr Zeit wird benötigt.
- Intervall
- Nach Anwahl dieses Menupunktes erscheint ein Fenster mit 4
- Stringgadgets, in denen die alten Intervallgrenzen (der Bereich, für
- den die Funktion gezeichnet werden soll) anzeigt werden. Diese Werte
- kann man wie gewohnt verändern. Der eingegebene Term muß nur den
- Anforderungen entsprechen, die auch für die Funktionen gelten. Außerdem
- darf die linke/untere Grenze nicht größer/gleich sein als die
- rechte/obere. In solchen Fällen erscheint das Fenster nach Anwahl des
- OK-Gadget (oder <RETURN> im vierten Stringgadget) wieder.
- Löschen
- Die auf dem Bildschirm dargestellten Funktionen und das
- Koordinatenkreuz werden gelöscht. Geschieht automatisch beim Verändern
- der Intervallgrenzen und Auflösung.
- Drucken
- Der für die Darstellung auf dem Bildschirm benutzte Rastport wird
- auf dem Drucker so groß wie möglich ausgegeben.
- Bereich mit Maus auswählen
- Dieser Menupunkt stellt eine Art Lupenfunktion zur Verfügung. Das
- Intervall, das als nächstes gezeichnet werden soll, kann mit der Maus
- ausgewählt werden. Die obere/linke Ecke wird mit der Maus angefahren,
- die linke Maustaste gedrückt und gehalten und dann die rechte/untere
- Ecke ausgewählt und die Maustaste losgelassen. Danach wird der
- Bildschirm gelöscht. Während die Maustaste gedrückt wird, wird um den
- momentan ausgewählten Bereich ein Kasten gezeichnet. Wurde die größte
- Darstellungsart (s.u.)ausgewählt, so kann jederzeit mit den
- Cursurtasten und ESC in der gesammten Darstellung gescrollt
- werden.
- Konstanten
- Ein Fenster ähnlich dem bei INTERVALL erscheint. In diesem kann man
- vier Konstanten (a,b,c,d) bestimmen, die bei Intervall und innerhalb
- der Funktionen benutzt werden können.
- About
- Dieser Menupunkt zeigt die Versionsnummer und das Datum der letzten
- Veränderung an dem Programm an. Durch Anklicken des Fensters
- verschwindet es wieder.
- ENDE
- Das Programm wird beendet (mit Sicherheitsabfrage).
-
- Funktion
- Ändern
- Nach Anwahl dieses Menupunktes erscheint ein Untermenu mit den bisher
- eingegebenen Funktionen (es werden die ersten 14 Zeichen der Funktion
- angezeigt). Wird einer dieser Funktionen angewählt, so erscheint sie in
- einem Stringgadget, so daß sie verändert werden kann. Die Funktion muß
- mathematisch korrekt eingegeben werden. Jede Funktion darf aus den
- Rechenarten +,-,*,/,^ und den Funktionen sin, cos, tan, log, int, sgn,
- abs, sqr, asin, acos, atan, ln und den Konstanten a, b, c, d, e und pi
- sowie der Variablen x bestehen. Es muß alles klein geschrieben werden.
- Zahlen dürfen normal (1; 1.1; .1) oder in Potenzschreibweise (3e5,5d-7)
- eingegeben werden. Bei Potenzen darf vor dem Exponenten ein + oder -
- stehen, ohne das der Exponent gleich geklammert werden muß. In der
- Regel sollte man aber alles so klammern, daß zweifelsfrei festgelegt
- ist, in welcher Reihenfolge der Term berechnet werden soll. Es gilt
- natürlich Potenz- vor Punkt-vor Strichrechnung. Wenn unpaarige Klammern
- vorhanden sind, erscheint das Stringgadget gleich wieder, damit man die
- Funktion korrigieren kann.
- Funktion, 1./2. Ableitung num/symb:
- Bei jedem dieser 5 Menupunkte erscheint wieder das Untermenu. Durch
- Anwahl eines Untermenupunktes kann man dann bestimmen, welche Funktion
- man gezeichnet haben will. Numerische Ableitungen werden nach dem
- Sekantenverfahren bestimmt, dabei können schon in der ersten Ableitung
- Ungenauigkeiten auftreten, die in der zweiten Ableitung dann schon
- recht deutlich werden. Beim symbolischen Ableiten wird erst die
- Ableitung als Term bestimmt und dann normal gezeichnet. Dabei kommt es
- dann nach Anwahl der Funktion zu einer kurzen Verzögerung, in der die
- Ableitung bestimmt wird. Diese Methode ist genauer, hat aber auch ihre
- Nachteile: Funktionsterme dürfen höchstens 500 Zeichen lang sein, bei
- komplizierten Funktionen kann diese Grenze bei der zweiten Ableitung
- leicht überschritten werden. Daher sollte der Programmteil Ableitung.c
- immer mit Stack-Checking compiliert werden (Lattice-C: ohne -v). Damit
- kann man einige Abstürze umgehen. Tritt bei dieser Version Plotter
- (ohne -v compiliert) ein Stacküberlauf auf, so erscheint ein Auto-
- requester, der einen darauf aufmerksam macht und die Möglichkeit zum
- Abbruch des Programms gibt. Dabei wird der Screen des Programms nicht
- geschlossen, dieser Speicher geht also verloren (leider). Aber immerhin
- ist der Rechner nicht aus heiterem Himmel abgestürzt.
-
- Außerdem sind einige der oben erwähnten Funktionen nicht ohne weiteres
- abzuleiten. Die Ableitung von sgn ist z.B. fast überall Null, nur um
- Null herum ist sie nicht definiert. Das Programm setzt dafür aber
- einfach Null ein. Außerdem wird z.B. die Ableitung von ln zu 1/x
- bestimmt und auch so gezeichnet, d.h. auch im negativen Bereich
- gezeichnet, obwohl ln dort überhaupt nicht definiert ist.
-
- Stellt das Programm beim Zeichnen einen mathematischen Fehler fest
- (z.B. Wurzel aus einer negativen Zahl), so erscheint nach dem Zeichnen
- ein Requester, der einen auf einen Fehler in der Formel aufmerksam
- macht. Dieser Fehler kann natürlich auch am Intervall liegen (oder bei
- 1/x wurde eine Division durch Null erkannt). Meistens kann man diese
- Meldung ignorieren, besonder wenn man sie schon erwartet hat. Sie
- erscheint hauptsächlich, um einen zu zeigen, daß beim Zeichnen etwas
- geschummelt wurde.
- Jeder Zeichenvorgang kann durch einen Mausklick in die Zeichenfläche
- abgebrochen werden. Es erscheint dann ein Requester, in dem man wählen
- kann, ob weitergezeichnet oder abgebrochen werden soll.
-
- Diskussion
- Unter diesem Menupunkt kann man sich eine grobe Kurvendiskussion er-
- stellen lassen (Nullstellen, Wendestellen und Extremstellen). Diese
- Stellen werden nur für das eingegebene Intervall bestimmt. Außerdem
- wird die Funktion sowie die erste und zweite Ableitung angezeigt. Bei
- Extremstellen wird angegeben, ob es ein Minimum oder Maximum ist, bei
- Wendestellen, ob es eine rechts-links "Kurve" oder umgekehrt ist.
- Nochmal zu den symbolischen Ableitungen: Eingefleischten Mathematikern
- mag bei einigen der Ableitungen die Haare zu Berge stehen. Zum Einen
- ist es mit der Vereinfachung der Terme noch nicht sehr weit her
- (Immerhin: 0*irgendetwas wird nicht angezeigt, wohl aber
- (1-1)*irgendetwas....).
- Aber auch rein mathematisch wird manchmal geschummelt. Folgende
- Ableitungen werden eingesetzt:
- +-*/ : Das übliche
- x^a : a*x^(a-1)
- a^x : a^x*ln(a)
- f(x)^g(x) : (g(x)*ln(f(x)))'*f(x)^g(x)
- (Weiß jemand etwas besseres oder einfacheres ?)
- trigonometr. Funktionen : Das übliche
- abs(x) : sgn(x) (Für x=0 nicht richtig)
- int(x) : 0 (Läßt sich drüber diskutieren)
- sgn(x) : 0 (Läßt sich drüber diskutieren)
- Das Programm macht nicht deutlich, wenn eine nicht ganz korrekte
- Ableitung benutzt wird. Im Zweifelsfall die nummerisch bestimmte
- Ableitung mit der symbolisch bestimmten vergleichen, sie sollten
- identisch sein. (Ausnahme: z.B. bei ln(x), siehe oben).
-
- ICH ÜBERNEHME KEINERLEI VERANTWORTUNG FÜR DIE RICHTIGKEIT DER
- ABLEITUNGEN ODER ANDERER ERGEBNISSE DIESES PROGRAMMS !! WER EIN
- ERGEBNIS IN EINER DIPLOMARBEIT ODER ÄHNLICHEN VERWENDET, SOLLTE LIEBER
- NOCHMAL VON HAND NACHRECHNEN !!!!
-
- Zu einer vollständigen Kurvendiskussion fehlt noch einiges: z.B.
- - Angabe Definitionsbereich
- - Symetrie
- - Asymptoten etc.
- (vielleicht später mal).
-
- Größe
- In diesen Menu kann man einstellen, ob auf einer 640x256- oder 1000 x
- 300-Bitplane gezeichnet werden soll. Da die größere Möglichkeit nicht
- in ein Fenster paßt, kann man mit den Cursor-Tasten in der Bitplan
- herumscrollen. Mit ESC kommt man in die obere/linke Ecke zurück. Die
- große Auflösung eignet sich besonders gut für Ausdrucke, aber man
- sollte dann einen Drucker haben, der auch so viele Punkte je Zeile
- darstellen kann.
-
-
- Hinweis
- -------
- Um den Code klein zu halten, wurde eine Stub-Routine MemCleanup
- eingefügt. Das verringert die Codelänge bei Lattice-Programmen meist
- etwas. Bei anderen Compilern sollten die entsprechenden Zeilen gelöscht
- werden (in Berechnungsroutinen.c). Für Lattice-Besitzer: das C-Tutorial
- auf Disk 4 beachten (V4.00).
-
- Bekannte Fehler:
- ----------------
- Es wäre schön, wenn ich hier KEINE hinschreiben (tippen) könnte. Aber das
- wäre nicht ganz richtig. Es gibt ein paar kleine Fehler, ich weiß aber
- nicht, wo sie sind.
- - Im Quelltext muß Mathieeebase als extern deklariert werden, sonst
- beschwert sich der Linker. Bei allen anderen Library-Pointern kann man
- einmal normal deklarieren. Dieser Fehler liegt wohl irgendwo in den
- (Link)Libraries.
- - Gelegentlich wird beim Zeichnen ein Funktionswert zu NULL bestimmt und
- entsprechend gezeichnet. Das ergibt dann einen einzelnen Punkt oder einen
- häßlichen Haken. Dieser Fehler ist nicht reproduzierbar, d.h. läßt man
- die gleiche Funktion sofort nochmal zeichnen, passiert das gleiche nicht
- nochmal. Wie kann sowas passieren ?
- - Gelegentlich tritt eine TrapV-Exception auf. Die anfälligen
- Fix-Umwandlungen (die diesen Fehler scheinbar produzieren können) habe
- ich alle überprüft, wo nötig auch eine Sicherheitsabfrage eingefügt.
- Diese Exception entsteht irgendwo anders. Sie ist ebenfalls nicht
- reproduzierbar.
-
- Die folgende Unzulänglichkeit werde ich vielleicht noch abstellen:
- - Die Fehlerabfragen im Parser (der Programmteil in der Tool.Library,
- der die Strings auswertet) sind nicht die besten. Es wird zwar
- verhindert, daß durch NULL geteilt wird, ebenfalls wird bemerkt, wenn von
- einer negativen Zahl die Wurzel oder der Log gebildet werden soll. Wurde
- aber eine sinnlose Funktion eingegeben, dann wird das nicht bemerkt und
- so weit wie möglich ausgewertet. Wurden Funktionen falsch eingegeben
- (sinn statt sin) oder groß geschrieben, dann versucht das Programm, dies
- als Zahl zu interpretieren, was natürlich recht sinnlose Ergebnisse
- hervorbringt. Sollte irgendwann eine Funktion nicht so gezeichnet werden,
- wie man sich das ungefähr vorstellt, dann sollte man überprüfen, ob man
- sich irgendwo vertippt hat.
-
- Falls jemand Verbesserungsvorschläge, Fehlerkorrekturen (oder auch neu
- entdeckte Fehler) hat (z.B. das irgendeine Ableitung falsch gebildet
- wird....ich habe da eigentlich sehr viel überprüft): Meine Addresse
- befindet sich im File Plotter.Readme (die Hinweise dort bitte beachten).
-
- Viel Freude mit diesen Programm !!
-
-
-