MathTool manual - DE - Sergei...

25
Inhalt 1. Was kann MathTool?.......... 1.1 Arithmetik ................... 1.2 Analysis ....................... 1.3 Algebra ....................... 1.4 Numerik ...................... 1.5 Statistik ....................... 1.6 Mathematische Logik . 2. Funktionsweise von MathTo 2.1 Arithmetische Ausdrüc 2.2 Logische Ausdrücke .... 2.3 Matrizenausdrücke ..... 2.4 Operatoren für Ausdrü 2.5 Beispiele ..................... 2.6 Befehle ........................ 2.6.1 Beispiel 1: Approxim 2.6.2 Beispiel 2: Definieren 2.6.3 Beispiel 3: Das Lösen 2.6.4 Beispiel 4: Das Lösen 2.6.5 Beispiel 5: Das Lösen 3. Grafische Darstellungen ..... 4. Komplexe Probleme und ihr 4.1 Der Risch-Algorithmus 4.2 Gröbnerbasen und der 4.3 Implizite räumliche Fun 5. Algorithmen in MathTool ... 5.1 Die Sprache MAL und i 5.2 Reservierte Zeichen un 5.3 Aufbau und Prinzipien 5.4 Datentypen ................. ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ............................................................................... ool – Eine kleine Einleitung ................................... cke ......................................................................... ............................................................................... ............................................................................... ücke und Matrizenausdrücke ................................ ............................................................................... ............................................................................... mation von Ausdrücken ......................................... en neuer Funktionen und Variablen ...................... n von Gleichungen ................................................ n von Gleichungssystemen ................................... n von Differentialgleichungen ............................... ............................................................................... re Lösungsalgorithmen ......................................... .............................................................................. r Buchberger-Algorithmus..................................... nktionen und der MarchingCubesAlgorithmus .... ............................................................................... ihre Syntax ............................................................ nd Schlüsselwörter ................................................ von MAL ............................................................... ............................................................................... ................................ 2 ................................ 2 ................................ 2 ................................ 2 ................................ 2 ................................ 3 ................................ 3 ................................ 3 ................................ 3 ................................ 4 ................................ 4 ................................ 5 ................................ 6 ................................ 7 .............................. 10 .............................. 10 .............................. 11 .............................. 12 .............................. 12 .............................. 13 .............................. 16 .............................. 16 .............................. 16 .............................. 17 .............................. 18 .............................. 18 .............................. 18 .............................. 19 .............................. 20

Transcript of MathTool manual - DE - Sergei...

Page 1: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Inhalt 1. Was kann MathTool?................................

1.1 Arithmetik ................................

1.2 Analysis ................................

1.3 Algebra ................................

1.4 Numerik ................................

1.5 Statistik ................................

1.6 Mathematische Logik ................................

2. Funktionsweise von MathTool

2.1 Arithmetische Ausdrücke

2.2 Logische Ausdrücke ................................

2.3 Matrizenausdrücke ................................

2.4 Operatoren für Ausdrücke und Matrizenausdrücke

2.5 Beispiele ................................

2.6 Befehle ................................

2.6.1 Beispiel 1: Approximation von Ausdrücken

2.6.2 Beispiel 2: Definieren neuer Funktionen und Variablen

2.6.3 Beispiel 3: Das Lösen von Gleichungen

2.6.4 Beispiel 4: Das Lösen von Gleichungssystemen

2.6.5 Beispiel 5: Das Lösen von Differentialgle

3. Grafische Darstellungen ................................

4. Komplexe Probleme und ihre Lösungsalgorithmen

4.1 Der Risch-Algorithmus

4.2 Gröbnerbasen und der Buchberger

4.3 Implizite räumliche Funktionen und der MarchingCubesAlgorithmus

5. Algorithmen in MathTool ................................

5.1 Die Sprache MAL und ihre Syntax

5.2 Reservierte Zeichen und Schlüsselwörter

5.3 Aufbau und Prinzipien von MAL

5.4 Datentypen ................................

................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................

Funktionsweise von MathTool – Eine kleine Einleitung ................................................................

Arithmetische Ausdrücke ................................................................................................

................................................................................................

................................................................................................

Operatoren für Ausdrücke und Matrizenausdrücke ................................

................................................................................................................................

................................................................................................................................

Approximation von Ausdrücken ................................................................

Beispiel 2: Definieren neuer Funktionen und Variablen ................................

Beispiel 3: Das Lösen von Gleichungen ................................................................

Beispiel 4: Das Lösen von Gleichungssystemen ................................................................

Beispiel 5: Das Lösen von Differentialgleichungen ................................

................................................................................................

Komplexe Probleme und ihre Lösungsalgorithmen ................................................................

................................................................................................

Gröbnerbasen und der Buchberger-Algorithmus................................................................

Implizite räumliche Funktionen und der MarchingCubesAlgorithmus ................................

................................................................................................

Die Sprache MAL und ihre Syntax ................................................................

Reservierte Zeichen und Schlüsselwörter ................................................................

Aufbau und Prinzipien von MAL ................................................................

................................................................................................

....................................................... 2

................................ 2

.................................... 2

.................................... 2

................................... 2

.................................... 3

.............................................. 3

.................................. 3

........................................ 3

................................................. 4

.................................................. 4

............................................................... 5

.................................. 6

..................................... 7

...................................... 10

................................................... 10

............................................. 11

................................ 12

............................................................ 12

................................................ 13

...................................... 16

........................................... 16

.................................. 16

................................. 17

.............................................. 18

......................................................... 18

............................................. 18

............................................................ 19

............................................................ 20

Page 2: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

5.5 Standardbefehle und Standardalgorithmen ......................................................................... 20

5.6 Beispiele ................................................................................................................................ 21

5.6.1 Beispiel 1: Der erste Algorithmus ...................................................................................... 21

5.6.2 Beispiel 2: Aufruf weiterer Algorithmen ........................................................................... 22

5.6.3 Beispiel 3: Algorithmus mit Matrizen ................................................................................ 22

5.6.4 Beispiel 4: Fehler aufgrund fehlender Wertrückgabe ....................................................... 23

5.7 Code generieren .................................................................................................................... 23

5.7.1 Hauptalgorithmus und Unterroutinen generieren ............................................................ 23

5.7.2 Bezeichnerdefinition generieren ....................................................................................... 24

5.7.3 Kontrollstrukturen generieren .......................................................................................... 24

5.7.4 Rückgabebefehl generieren .............................................................................................. 25

5.8 In den nächsten Versionen .................................................................................................... 25

1. Was kann MathTool? MathTool ist ein leichtgewichtiges Computeralgebrasystemund es deckt einen bedeutenden Teil mathematischer Fragestellungen und Anwendungen ab, mit denen sich jeder Mathematiker oder Naturwissenschaftler täglich konfrontiert sieht. Es deckt Problemstellungen in den Bereichen Arithmetik, Algebra, Analysis, Numerik und Statistik ab. Welche Problemstellungen MathTool genau beherrscht, wird in den folgenden Abschnitten näher beschrieben.

1.1 Arithmetik Alle Arten von Berechnungen mit (fast) beliebig großen Zahlen, Bestimmung des kleinsten gemeinsamen Vielfachen und des größten gemeinsamen Teilers, Restklassenrechnung.

1.2 Analysis Nullstellen- und Extremstellenbestimmung von Funktionen, (Partielle) Differentiation, algebraische Integration, algebraisches Lösen gewöhnlicher Differentialgleichungen, Berechnung von Taylor- und Fourierpolynomen.

1.3 Algebra Matrizen- und Vektorrechnung, insbesondere Berechnung von Eigenwerten und Eigenvektoren und das Lösen beliebiger linearer Gleichungssysteme. Das Modul Kommutative Algebra wird zurzeit ausgebaut, in welchem unter anderem die Berechnung von Gröbnerbasen und von Minimalpolynomen algebraischer Zahlen sowie die Lösung polynomialer Gleichungssysteme implementiert wird.

1.4 Numerik Numerische Approximation von Ausdrücken und Matrizenausdrücken, numerische Integration, numerisches Lösen von Gleichungen sowie von gewöhnlichen Differentialgleichungen.

Page 3: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

1.5 Statistik Berechnung von Mittelwert und Varianz sowie die Berechnung der Regressionsgeraden für vorgegebene Verteilungen.

1.6 Mathematische Logik Vereinfachung logischer Ausdrücke, Bestimmung der konjunktiven und disjunktiven Normalform logischer Ausdrücke, tabellarische Auswertung logischer Ausdrücke.

2. Funktionsweise von MathTool – Eine kleine Einleitung MathTool wird ausschließlich über die Eingabe in der Kommandozeile gesteuert. Abhängig von der Eingabe des Benutzers versucht MathTool die Eingabe zu verstehen und entsprechend zu verarbeiten. Wenn dies nicht gelingt, so meldet MathTool sich mit einer detaillierten Fehlermeldung zurück. Was genau eingegeben werden darf und wie die genaue Eingabesyntax lautet, wird im Folgenden näher beschrieben.

2.1 Arithmetische Ausdrücke MathTool versteht arithmetische Ausdrücke. Hierbei werden die vier Grundrechenarten mit +, -, * und / angegeben, Potenzen durch ^. Mathematische Funktionen tragen ihre üblichen Namen, z.B. sin(…), exp(…), ln(…), arctan(…) etc. Eine Liste mit allen Funktionen finden Sie weiter unten. Wichtig: Multiplikationen müssen stets durch ein * angegeben werden. MathTool versteht den Ausdruck 2*x, dagegen jedoch nicht 2x und gibt dementsprechend einen Fehler aus. Gültige arithmetische Ausdrücke sehen dann etwa wie folgt aus:

3*x + y^5, -a + 6*exp(2 + cos(z^4)), …

Ein eingegebener mathematischer Ausdruck wird von MathTool sofort in vereinfachter Form ausgegeben, sofern dies möglich ist. Dies kann jedoch zu verlängerten Wartezeiten führen, falls der Ausdruck zu kompliziert ist und eine Vereinfachung viel zu lange dauert. In MathTool können Veränderliche mit einem einfachen Kleinbuchstaben oder mit einem Kleinbuchstaben mit Index bezeichnet werden. Ebenso sind im Anschluss beliebig viele Apostrophs (′) erlaubt. Gültige Variablen sind demnach etwa

a, b, c, …, x, y, …, a_1, x_18, …, y′, a_2′, …

nicht aber etwa xy, abc oder a′_1′. Der Apostroph suggeriert hierbei eine Ableitung, die aber nur dann zum Tragen kommt, wenn es um Differentialgleichungen geht. Ansonsten dient er zur bloßen Variablenunterscheidung. Die Konstante pi bezeichnet die Kreiszahl Pi (= 3,14159265358979…).Man beachte, dass MathTool beim Kompilieren eines Ausdrucks Leerzeichen beseitigt und Großbuchstaben zu Kleinbuchstaben macht. Insofern ist beispielsweise die Veränderliche A_3 dasselbe wie a_3.

Liste aller in MathTool verfügbaren Funktionen: abs(x): Berechnet den Betrag von x. arccos(x): Berechnet den Arkuskosinus von x (in Bogenmaß). arccosec(x): Berechnet den Arkuskosecans von x (in Bogenmaß). arccot(x): Berechnet den Arkuskotangens von x (in Bogenmaß). arcsec(x): Berechnet den Arkussecans von x (in Bogenmaß). arcsin(x): Berechnet den Arkussinus von x (in Bogenmaß). arctan(x): Berechnet den Arkustangens von x (in Bogenmaß).

Page 4: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

arcosh(x): Berechnet den Areakosinus Hyperbolicus von x. arcosech(x): Berechnet den Areakosecans Hyperbolicus von x. arcoth(x): Berechnet den Areakotangens Hyperbolicus von x. arsech(x): Berechnet den Areasecans Hyperbolicus von x. arsinh(x): Berechnet den Areasinus Hyperbolicus von x. artanh(x): Berechnet den Areatangens Hyperbolicus von x. cos(x): Berechnet den Kosinus von x (x in Bogenmaß). cosh(x): Berechnet den Kosinus Hyperbolicus von x. cosec(x): Berechnet den Kosecans von x (x in Bogenmaß). cosech(x): Berechnet den Kosecans Hyperbolicus von x. cot(x): Berechnet den Kotangens von x (x in Bogenmaß). coth(x): Berechnet den Kotangens Hyperbolucus von x. exp(x): Berechnet die Exponentialfunktion von x. lg(x): Berechnet den Logarithmus zur Basis 10 von x. ln(x): Berechnet den natürlichen Logarithmus von x. sin(x): Berechnet den Sinus von x (x in Bogenmaß). sgn(x): Berechnet das Signum von x. sinh(x): Berechnet den Sinus Hyperbolicus von x. sec(x): Berechnet den Secans von x (x in Bogenmaß). sech(x): Berechnet den Secans Hyperbolicus von x. sqrt(x): Berechnet die Quadratwurzel von x. tan(x): Berechnet den Tangens von x (x in Bogenmaß). tanh(x): Berechnet den Tangens Hyperbolicus von x.

2.2 Logische Ausdrücke MathTool versteht, ebenso wie arithmetische Ausdrücke, auch logische Ausdrücke und kann diese auswerten. Die Operatoren !, &, |, > und = entsprechen der logischen Negation, Konjunktion (UND), Disjunktion (ODER), Implikation und Äquivalenz.

Wichtig: Auch wenn Und- bzw. Oder-Operatoren oft durch * bzw. + ersetzt werden, so ist dies in MathTool nicht der Fall. Dies dient dazu, um Missverständnissen beim Kompilieren vorzubeugen. Ansonsten würde MathTool beispielsweise nicht wissen, ob es sich bei

a + 1

um einen arithmetischen oder um einen logischen Ausdruck handelt. Gültige logische Ausdrücke sehen dann etwa wie folgt aus:

a&!b, !(a&b|c)>1|d, …

Ein eingegebener logischer Ausdruck wird von MathTool sofort in vereinfachter Form ausgegeben, sofern dies möglich ist. Dies kann jedoch zu verlängerten Wartezeiten führen, falls der Ausdruck zu kompliziert ist und eine Vereinfachung entsprechend lange dauert.

2.3 Matrizenausdrücke MathTool versteht ebenso Matrizen und Vektoren. Im Prinzip unterscheidet MathTool diese beiden Arten von Objekten gar nicht, denn es interpretiert einen Vektor als eine Matrix mit nur einer Spalte. Um eine Matrix einzugeben verwendet man die eckigen Klammern ‚[‚ und ‚]‘. Dabei werden die Matrixeinträge, welche zu selben Zeile gehören durch ein Komma getrennt werden und verschiedene Zeilen werden durch ein Semikolon getrennt. Beispielsweise definiert der Ausdruck

Page 5: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

[1,2,5+x;0,-2/5,3]

eine Matrix mit zwei Zeilen und drei Spalten. Analog definiert die Eingabe

[5;-2;0;1]

einen Vektor mit vier Einträgen. Um Summen, Differenzen, Produkte oder Potenzen von Matrizen darzustellen verwendet man dieselben Operatoren wie für gewöhnliche Ausdrücke.

Liste aller Matrizenfunktionen:

abs(a): Berechnet den Betrag eines Vektors a. cos(a): Berechnet den Cosinus der Matrix a. cosh(a): Berechnet den hyperbolischen Cosinus der Matrix a. det(a): Berechnet die Determinante einer (quadratischen) Matrix a. exp(a): Berechnet die Exponentialfunktion der Matrix a. ln(a): Berechnet den natürlichen Logarithmus der Matrix a. tr(a): Berechnet die Spur einer (quadratischen) Matrix a. sin(a): Berechnet den Sinus der Matrix a. sinh(a): Berechnet den hyperbolischen Sinus der Matrix a. trans(a): Berechnet die Transponierte einer Matrix a.

2.4 Operatoren für Ausdrücke und Matrizenausdrücke MathTool versteht eine Reihe von Operatoren und kann diese, abhängig von der Art der Argumente, sowohl für Ausdrücke als auch für Matrizenausdrücke, auswerten. Liste aller in MathTool verfügbaren Operatoren: cross(F1, …, Fn-1): Berechnet das allgemeine Kreuzprodukt F1 × … × Fn-1 der n-dimensionalen Vektoren F1, …, Fn-1. diff(F(x1, …, xn), xi): Berechnet die partielle Ableitung ∂F/∂xi der Funktion oder des MatrizenausdrucksF nach der Variablen xi. diff(F(x1, …, xn), xi, k): Berechnet die k-te partielle Ableitung ∂kF/∂xi

k der Funktion oder des MatrizenausdrucksF nach der Variablen xi. diff(F(x1, …, xn), xi, …, xj): Berechnet die iterierte partielle Ableitung ∂(… ∂F/∂xi …)/∂xj der Funktion oder des MatrizenausdrucksF nach den Variablen xi, …, xj. Die Variablen xi, …, xj müssen nicht alle verschieden sein. div(F(x1, …, xn)): Berechnet die Divergenz div(F) = ∂F/∂x1 + ··· + ∂F/∂xn der Funktion oder des MatrizenausdrucksF. fac(n) oder n!: Berechnet die Fakultät der Zahl n. Für nichtnegative ganze Zahlen n liefert es die gewöhnliche Fakultät n! = 1·2· ··· ·n. Fakultäten negativer ganzer Zahlen liefern einen Fehler und Fakultäten von nicht ganzen Zahlen werden im Approximationsmodus durch den Wert der GammafunktionΓ(n + 1) approximiert. Fakultäten ganzer Zahlen werden nur bis n <= 10000 ausgeschrieben. gcd(n1, …, nk): Berechnet den größten gemeinsamen Teiler der ganzen Zahlen n1, …, nk.

Page 6: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

int(F(x, a1, …, an), x): Berechnet das unbestimmte Integral ∫ F(x, a1, …, an) dx von der Funktion oder des MatrizenausdrucksF(x, a1, …, an) bezüglich x. int(F(x, a1, …, an), x, a, b): Berechnet das bestimmte Integral ∫a

bF(x, a1, …, an) dx von der Funktion oder des MatrizenausdrucksF(x, a1, …, an) von a bis b bezüglich x. Sowohl die Funktion F als auch die Grenzen a und b dürfen weitere Parameter enthalten. laplace(F(x1, …, xn)): Berechnet den Laplace-Operator ΔF = ∂2F/∂x1

2 + ··· + ∂2F/∂xn2 der

Funktion oder des MatrizenausdrucksF. lcm(n1, …, nk): Berechnet das kleinste gemeinsame Vielfache der ganzen Zahlen n1, …, nk. max(x1, …, xn): Berechnet das Maximum der Werte x1, …, xn. min(x1, …, xn): Berechnet das Minimum der Werte x1, …, xn. mod(a, b): Sind a und b ganze Zahlen, so berechnet es den Divisionsrest r bei ganzzahliger Division von a durch b. modpow(a, b, c):Sind a, b und c ganze Zahlen und b ≥ 0, so berechnet es ab mod c. mu(x1, …, xn): Berechnet das arithmetische Mittel der Werte x1, …, xn. prod(F(k, x1, …, xn), k, k1, k2): Berechnet das Produkt F(k1, x1, …, xn)·F(k1 + 1, x1, …, xn)· ··· ·F(k2, x1, …, xn), wobei F eine Funktion oder ein quadratischer Matrizenausdruck ist. Falls k1> k2 ist, so ist das Ergebnis 1. Falls k1 oder k2 keine ganzen Zahlen oder zu große ganze Zahlen sind, so wird das Produkt nicht explizit ausgeschrieben. rot(F(x, y, z), x, y, z): Berechnet die Rotationdes dreidimensionalen Vektors F(x, y, z). sigma(x1, …, xn): Berechnet die Standardabweichung der Werte x1, …, xn. sum(F(k, x1, …, xn), k, k1, k2): Berechnet die Summe F(k1, x1, …, xn) + F(k1 + 1, x1, …, xn) + ··· + F(k2, x1, …, xn), wobei F eine Funktion oder ein Matrizenausdruck ist. Falls k1> k2 ist, so ist das Ergebnis 0. Falls k1 oder k2 keine ganzen Zahlen oder zu große ganze Zahlen sind, so wird die Summe nicht explizit ausgeschrieben. Dass sowohl im Operator prod() als auch im Operator sum() variable Grenzen stehen dürfen, erlaubt es einem natürlich auch verschachtelte Summen/Produkte zu bilden. taylor(F(x, y1, …, yn), x, x0, k): Berechnet das Taylorpolynom k-ten Grades von der Funktion F(x, y1, …, yn) bezüglich der Variablen x an der Stelle x = x0. Operatoren können wiederum in weiteren mathematischen Ausdrücken vorkommen und somit weiterverarbeitet werden. var(x1, …, xn): Berechnet die Varianz der Werte x1, …, xn.

2.5 Beispiele

Page 7: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Wir wollen anhand einiger Beispiele sehen, wie MathTool bestimmte Berechnungen durchführt. Wir wollen die folgenden drei Objekte von MathTool ausgerechnet und weitestgehend vereinfacht ausgegeben haben:

1. Das Matrizenprodukt −2 13 0

𝑎 4

4 −21 7

.

2. Den Term− + .

3. Die Summe der Ableitungen ln(𝑥 + 𝑦 ) + ln(𝑥 + 𝑦 ).

Nach Eingabe der drei Befehle

[-2,1;3,0;a,4]*[4,-2;1,7]^3, (-1/2)*x+(x^4-5*x^2+x+2)/(2*x^3-x-14) und

diff(ln(x^2+y^2),x,2)+diff(ln(x^2+y^2),y,2) liefert MathTool die folgenden drei Ausgaben (hier auf einem Bildschirm zusammengefasst):

2.6 Befehle MathTool ist auch in der Lage, eine Reihe von Befehlen zu verstehen – also Anweisungen, gewisse Arten von Berechnungen durchzuführen, deren Parameter in den Befehlparametern kodiert sind. Die Befehle tragen meistens (mehr oder weniger) intuitive Namen, die auf den Zweck leicht schließen lassen. Hier ist eine vollständige Liste von Befehlen und ihrer Syntax, die MathTool verarbeiten kann: approx(F(x1, …, xn)): Approximiert den Ausdruck F(x1, …, xn). ccnf(F(x1, …, xn)): Liefert die kanonische konjunktive Normalform des logischen Ausdrucks F(x1, …, xn). cdnf(F(x1, …, xn)): Liefert die kanonische disjunktive Normalform des logischen Ausdrucks F(x1, …, xn).

Page 8: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

clear(): Leert die gesamte Konsole. Bereits definierte Variablen und Funktionen bleiben jedoch erhalten. def(x = x0): Weist einer gültigen Variable x den konstanten Wert x0 zu. def(F(x1, …, xn) = G(x1, …, xn)): Definiert eine Funktion F in den Variablen x1, …, xn durch den Ausdruck G(x1, …, xn). Selbstverständlich werden vordefinierte Funktionen wie sin(), tan(), exp(), etc. nicht überschrieben. defvars(): Gibt die Liste aller Variablen aus, denen ein fester Wert mittels Befehl def() zugewiesen wurde. deffuncs(): Gibt die Liste aller Funktionen aus, die während der aktuellen Sitzung vom Benutzer mittels Befehl def() definiert wurden. euler(n): Gibt die ersten n Stellen der Eulerschen Zahl e aus. Das Ergebnis wird nicht gerundet.Die Zahl n darf hier aus Speichergründen maximal 100000 betragen. eigenvalues(A): Gibt die Eigenwerte der quadratischen Matrix A aus, sofern diese berechenbar sind. eigenvectors(A): Gibt Eigenvektoren der quadratischen Matrix A aus, gruppiert nach den entsprechenden Eigenwerten von A, sofern diese berechenbar sind. expand(F(x1, …, xn)): Löst alle enthaltenen Klammern bei Multiplikationen auf (multipliziert alle Terme aus). latex(F(x1, …, xn) = … = G(x1, …, xn)): Generiert den Latex-Code für die mathematische Gleichheits-kette F(x1, …, xn) = … = G(x1, …, xn). normal(F(x1, …, xn), x1 = a1, …, xn = an): Liefert die Parametrisierung der Normalengeraden an den Graphen von F im Punkte (x1, …, xn) = (a1, …, an). pi(n): Gibt die ersten n Stellen der Kreiszahl Pi aus. Das Ergebnis wird nicht gerundet.Die Zahl n darf hier aus Speichergründen maximal 100000 betragen. plot2d(F1(x), …, Fn(x), x, x1, x2): Zeichnet den Graphen der Funktionen F1, …, Fn im Intervall x1<= x <= x2. Der Zoomfaktor kann hier (fast) beliebig groß und beliebig klein werden. plotimplicit2d(F1(x, y) = F2(x, y), x, y, x1, x2, y1, y2): Zeichnet die Lösungsmenge der Gleichung F1(x, y) = F2(x, y) in zwei Variablen im Rechteck x1<= x <= x2, y1<= y <= y2. Hier kann in den Graphen weder hinein- noch herausgezoomt werden, ebenso kann das Koordinatensystem nicht verschoben werden. plotimplicit3d(F1(x, y, z) = F2(x, y, z), x, y, z, x1, x2, y1, y2, z1, z2): Zeichnet die Lösungsmenge der Gleichung F1(x, y, z) = F2(x, y, z) in drei Variablen im Quader x1<= x <= x2, y1<= y <= y2, z1<= z<= z2. Der Zoomfaktor liegt hier zwischen 0.1 und 10. plot3d(F1(x, y), …, Fn(x, y), x, y, x1, x2, y1, y2): Zeichnet die Graphen der Funktionen F1, …, Fn im Rechteck x1<= x <= x2, y1<= y <= y2. Der Zoomfaktor liegt hier zwischen 0.1 und 10. plotcurve2d([F1(t); F2(t)], t, t1, t2): Zeichnet die ebene Kurve, welche durch die Komponentenfunktionen F1 und F2 parametrisiert wird, für t1<= t <= t2. Der Zoomfaktor liegt hier zwischen 0.1 und 10. Manchmal kann es vorkommen (etwa beim Zeichnen von Kurven, welche sehr „unglücklich“ parametrisiert wurden), dass nicht die ganze Kurve, sondern nur ein Teil von ihr gezeichnet werden (etwa für t1<= t <= t‘ für ein t‘ <= t2).

Page 9: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

plotcurve3d([F1(t); F2(t); F3(t)], t, t1, t2): Zeichnet die räumliche Kurve, welche durch die Komponentenfunktionen F1, F2 und F3 parametrisiert wird, für t1<= t <= t2. Der Zoomfaktor liegt hier zwischen 0.1 und 10. Auch hier gilt dasselbe wie im Falle von plotcurve im Zweidimensionalen, dass manche „schlecht“ parametrisierten Kurven nicht komplett gezeichnet werden können. plotpolar(F1(t), …, Fn(t), t, t1, t2): Zeichnet die Graphen der Funktionen F1, …, Fn für t1<= t <= t2, wobei t den Winkel und Fi(t) den Radius in Polarkoordinaten angeben. Der Zoomfaktor liegt hier zwischen 0.1 und 10. plotcylindrical(F1(r, t), …, Fn(r, t), r, t, r1, r2, t1, t2): Zeichnet die Graphen der Funktionen F1(r, t), …, Fn(r, t) für r1<= r <= r2 und t1<= t <= t2 in Zylinderkoordinaten, wobei r den Radius und t den Winkel angibt. Dabei muss der Radius nichtnegativ sind und die Winkeldifferenz t2 – t1 aus technischen Gründen maximal 20π betragen. Der Zoomfaktor liegt hier zwischen 0.1 und 10. plotspherical(F1(u, v), …, Fn(u, v), u, v, u1, u2, v1, v2): Zeichnet die Graphen der Funktionen F1(u, v), …, Fn(u, v) für u1<= u <= u2 und v1<= v <= v2 in Kugelkoordinaten, wobei u den Winkel in der x, y-Ebene und v den Winkel zur z-Achse angibt. Dabei müssen die Winkeldifferenzen u2 – u1 und v2 – v1 aus technischen Gründen maximal 20π betragen. Der Zoomfaktor liegt hier zwischen 0.1 und 10. plotsurface([F1(s, t); F2(s, t); F3(s, t)], s, t, s1, s2, t1, t2): Zeichnet die räumliche Fläche, welche durch die Komponentenfunktionen x = F1(s, t), y = F2(s, t) und z = F3(s, t) parametrisiert wird, für s1<= s <= s2 und t1<= t <= t2. Der Zoomfaktor liegt hier zwischen 0.1 und 10. plotvectorfield2d([F1(x, y); F2(x, y)], x, y, x1, x2, y1, y2): Zeichnet das Vektorfeld [F1(x, y); F2(x, y)] für x1<= x <= x2 und y1<= y <= y2. Der Zoomfaktor kann hier (fast) beliebig groß und beliebig klein werden. plotvectorfieldpolar([F1(r, t); F2(r, t)], r, t, r1, r2, t1, t2): Zeichnet das Vektorfeld [F1(r, t); F2(r, t)] für r1 <= r <= r2 und t1 <= t <= t2. Dabei bildet (r, t) die Polardarstellung des Punktes und F1(r, t) gibt den Radius und F2(r, t) den Winkel in Polarkoordinaten für das Vektorfeld an. Der Zoomfaktor kann hier (fast) beliebig groß und beliebig klein werden. regressionline(P1, …, Pn): Berechnet die Gleichung der Regressionsgeraden für die Punkte P1, …, Pn, 2 <= n, und zeichnet diese, falls möglich. Die Punkte Pi müssen, nach Vereinfachung, von der Form [a;b], d.h. also (2×1)-Matrizen sein. solve(F1(x) = F2(x)): Bestimmt die algebraischen Lösungen der Gleichung F1(x) = F2(x) in x, falls möglich. Beachten Sie, dass sich nicht jede Gleichung algebraisch lösen lässt. Gleichungen der Form exp(x) – x = 3 besitzen beispielsweise keine Lösung, die sich mittels algebraischer Ausdrücke oder elementarer Funktionen in geschlossener Form hinschreiben lässt. Bei solchen Eingaben würde MathTool keine (exakte) Lösung liefern. solve(F1(x, a1, …, an) = F2(x, a1, …, an), x): Bestimmt die algebraischen Lösungen der Gleichung F1(x, a1, …, an) = F2(x, a1, …, an) in x (in Abhängigkeit von Parametern a1, …, an), falls möglich. solve(F1(x) = F2(x), x1, x2): Bestimmt die numerischen Lösungen der Gleichung F1(x) = F2(x) im Bereich x1<= x <= x2. solve(F1(x) = F2(x), x1, x2, n): Bestimmt die numerischen Lösungen der Gleichung F1(x) = F2(x) im Bereich x1<= x <= x2. Hierbei wird das Intervall [x1, x2] in n gleiche Teile unterteilt und in jedem Teilintervall wird höchstens eine Lösung ermittelt. Höheres n kann zwar potentiell mehr Lösungen liefern, verlängert dafür aber die Berechnungszeit. Diese Funktion kann dann nützlich sein, wenn der Benutzer über bestimmte Kenntnisse bezüglich der Lösungen der Gleichung F1(x) = F2(x) verfügt. solvediffeq(F1(x, y, y‘, y“, …, y(n)) = F2(x, y, y‘, y“, …, y(n)), x, y): Liefert eine Lösung der Diferentialgleichung F1(x, y, y‘, y“, …, y(n)) = F2(x, y, y‘, y“, …, y(n)).

Page 10: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

solvediffeq(F(x, y, y‘, y“, …, y(k)), x, y, n, x0, x1, y0, y1, …, yn-1): Liefert eine numerische Lösung der Diferentialgleichung y(n) = F(x, y, y‘, y“, …, y(k)), y(x0) = y0, …, y(n-1)(x0) = yn-1 mit k <= n im Bereich x0<= x <= x1. Für die numerische Berechnung wird das Intervall [x0, x1] in 1000 gleiche Teile unterteilt und in der Konsole werden alle 1001 Funktionswerte an den betreffenden Stellen ausgegeben. table(F(x1, …, xn)): Liefert eine Wahrheitswertetabelle für den logischen Ausdruck F(x1, …, xn). Beträgt die Anzahl der in F vorkommenden Veränderlichen jedoch mehr als 20, so wird aus Platzgründen die Tabellenberechnung nicht durchgeführt. tangent(F(x1, …, xn), x1 = a1, …, xn = an): Liefert die Gleichung der Tangentialebene an den Graphen von F im Punkte (x1, …, xn) = (a1, …, an). Zusätzlich wird im zwei- und im dreidimensionalen (parameterlosen) Fall ein entsprechender Graph gezeichnet. taylordiffeq(F(x, y, y‘, y“, …, y(k)), x, y, n, x0, y0, y1, …, yn-1, m): Liefert das Taylorpolynom m-ten Grades von der Lösung der Diferentialgleichung y(n) = F(x, y, y‘, y“, …, y(k)), y(x0) = y0, …, y(n-1)(x0) = yn-1 mit k <= n. undeffuncs(f1, …, fn): Entfernt die Funktionen f1, …, fn aus dem Speicher. undefallfuncs(): Entfernt alle vom Benutzer definierten Funktionen aus dem Speicher. undefvars(x1, …, xn): Gibt die Variablen x1, …, xn wieder frei. undefallvars(): Gibt alle vom Benutzer mit einem festen Wert belegten Variablen wieder frei. undefall(): Gibt alle Variablen wieder frei und entfernt alle Funktionen, die im Laufe dieser Sitzung definiert wurden. Für eine bessere Illustration betrachten wir ein paar Beispiele. Den Befehlen zur graphischen Darstellung von zwei- und dreidimensionalen Funktionsgraphen ist ein eigener Abschnitt gewidmet.

2.6.1 Beispiel 1: Approximation von Ausdrücken

Wir möchten wissen, welchen Wert der Ausdruck √4327 + sin ungefähr besitzt. Die Eingabe des

Befehls

approx(4327^(1/7)+sin(pi/9)) liefert uns die folgende Antwort:

2.6.2 Beispiel 2: Definieren neuer Funktionen und Variablen Die Variable a soll (für eine gewisse Zeit) den festen 5/7 tragen. Die Eingabe des Befehls

Page 11: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

def(a=5/7) liefert die Ausgabe, dass die Variable a entsprechend auf den Wert 5/7 gesetzt wurde:

Man beachte nun, dass solange a einen festen Wert trägt, sie nicht für Berechnungen verwendet werden kann, in denen tatsächlich Variablen gefordert werden. Der Befehl solve(a^2=7,a) (also das

Lösen der Gleichung 𝑎 = 7 nach der Variablen a) liefert in der Tat einen Fehler. Mit dem Befehl

undefvars(a) wird die Variable a wieder freigegeben und besitzt fortan keinen festen Wert mehr.

Wir wollen nun die Funktion 𝑓(𝑥, 𝑦) = 𝑥 + 𝑦 definieren. Die Eingabe des entsprechenden Befehls

def(f(x,y)=x^2+sqrt(y))

liefert unseine entsprechende Ausgabe, die auf den ersten Blick vielleicht etwas merkwürdig erscheint, da hier andere Variablennamen verwendet werden:

Die Parametervariablen tragen in der Ausgabe eben deshalb solche technischen Namen (𝑈 , 𝑈 , 𝑈 , …), damit es keine Namenskollision mit bereits eventuell verwendeten Variablen gibt (denn vom Benutzer verwendete Variablen beginnen stets mit einem Kleinbuchstaben). Analog entfernt der Befehl

undeffuncs(f) die Funktion f aus dem Pool der von uns definierten Funktionen.

2.6.3 Beispiel 3: Das Lösen von Gleichungen Wir möchten die Gleichung 𝑥 − 2𝑥 − 3𝑥 + 11𝑥 − 10 = 0 lösen. Hierfür müssen wir einfach den Befehl

solve(x^4-2*x^3-3*x^2+11*x-10 = 0) in die Kommandozeile von MathTool eingeben und erhalten sofort die folgende Antwort:

Page 12: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Ähnlich liefert der Befehl

solve(5^x+25^x=a,x) eine Lösung der Gleichung 5 + 25 = 𝑎nach der Variablen x die Lösungen, welche vom Parameter a abhängen:

2.6.4 Beispiel 4: Das Lösen von Gleichungssystemen Wir wollen das Gleichungssystem 𝑥 𝑦 + 𝑥𝑦 = 42, −𝑥𝑦 + 𝑥 𝑦 = 102 in den Veränderlichen x und y lösen. Dies wird durch den Befehl

solvesystem(x^3*y+x*y^2=42,-x*y+x^2*y^3=50,x,y) bewerkstelligt und liefert die folgende Ausgabe:

2.6.5 Beispiel 5: Das Lösen von Differentialgleichungen Um die allgemeine Lösung der Differentialgleichung (𝑦 − 2𝑦)(𝑦 − 𝑦 ) = 0 zu finden (wobei 𝑦 = 𝑦(𝑥) eine Funktion in der Veränderlichen x sein soll), müssen wir das folgende Kommando absetzen:

Page 13: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

solvediffeq((y''-2*y)*(y''-y^2)=0,x,y)

Es folgt sofort die folgende Ausgabe mit impliziten und expliziten Lösungen:

3. Grafische Darstellungen Ein besonderes Feature von MathTool ist eine große Sammlung von Techniken zur grafischen Darstellung mathematischer Objekte, sowohl in zwei, als auch in drei Dimensionen. Diese können anschließend exportiert werden, was für verschiedene Präsentationen äußerst nützlich ist. In der Mathematik kennt man eine ganze Reihe verschiedener Verfahren, um mathematische Objekte graphisch darstellen zu können. Neben der „gewöhnlichen“ Darstellung von zwei- und dreidimensionalen Graphen wird häufig auch auf eine Darstellung in Polarkoordinaten, Zylinderkoordinaten oder Kugelkoordinaten zurückgegriffen. Ebenso kommen Situationen vor, in denen Funktionen in impliziter Form gegeben sind und diese trotzdem dargestellt werden müssen. Letzteres bedeutet im zweidimensionalen Fall etwa, dass eine Funktion 𝑦 = 𝑓(𝑥) stattdessen in der

Form einer Gleichung 𝐹(𝑥, 𝑦) = 0 angegeben wird (beispielweise wird die Funktion 𝑦 = 𝑥 / etwa in der Form 𝑦 − 𝑥 = 0 angegeben).Analog kann man auch implizit gegebene Funktion im dreidimensionalen Raum betrachten. MathTool beherrscht entsprechende Algorithmen, um Objekte in fast jeder geforderten Form darzustellen. Dies wird durch die folgenden Befehle geleistet: plot2d(𝒇𝟏(𝒙), …, 𝒇𝒏(𝒙), x, a, b): Stellt die Funktionen 𝒇𝟏(𝒙), …, 𝒇𝒏(𝒙) im Zeichenbereich a ≤ x ≤ b dar.

Page 14: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

plot3d(𝒇𝟏(𝒙, 𝒚), …, 𝒇𝒏(𝒙, 𝒚), x, y,𝒙𝟏, 𝒙𝟐, 𝒚𝟏, 𝒚𝟐): Stellt die Funktionen 𝒇𝟏(𝒙, 𝒚), …, 𝒇𝒏(𝒙, 𝒚) im Zeichenbereich 𝒙𝟏≤ x ≤𝒙𝟐, 𝒚𝟏≤ y ≤𝒚𝟐 dar. plotimplicit2d(𝒇(𝒙, 𝒚) = 𝒈(𝒙, 𝒚), x, y,𝒙𝟏, 𝒙𝟐, 𝒚𝟏, 𝒚𝟐): Stellt die Funktion, welche durch die implizite Gleichung 𝒇(𝒙, 𝒚) = 𝒈(𝒙, 𝒚)gegeben ist, im Zeichenbereich 𝒙𝟏≤ x ≤𝒙𝟐, 𝒚𝟏≤ y ≤𝒚𝟐 dar. plotimplicit3d(𝒇(𝒙, 𝒚, 𝒛) = 𝒈(𝒙, 𝒚, 𝒛), x, y,z, 𝒙𝟏 , 𝒙𝟐 , 𝒚𝟏 , 𝒚𝟐 , 𝒛𝟏 , 𝒛𝟐): Stellt die Funktion, welche durch die implizite Gleichung 𝒇(𝒙, 𝒚, 𝒛) = 𝒈(𝒙, 𝒚, 𝒛)gegeben ist, im Zeichenbereich 𝒙𝟏≤ x ≤𝒙𝟐, 𝒚𝟏≤ y ≤𝒚𝟐, 𝒛𝟏 ≤ z ≤ 𝒛𝟐dar. plotcurve2d([𝒇(𝒕); 𝒈(𝒕)], t,𝒕𝟏, 𝒕𝟐): Stellt die Kurve, welche durch 𝑥 = 𝒇(𝒕), 𝑦 = 𝒈(𝒕) gegeben ist, für 𝒕𝟏≤ t ≤𝒕𝟐 dar. plotcurve3d( [𝒇(𝒕); 𝒈(𝒕); 𝒉(𝒕)] , t, 𝒕𝟏 , 𝒕𝟐 ): Stellt die Kurve, welche durch 𝑥 = 𝒇(𝒕) , 𝑦 = 𝒈(𝒕) , 𝑧 = 𝒉(𝒕)gegeben ist, für 𝒕𝟏≤ t ≤𝒕𝟐 dar. plotcylindrical(𝒇𝟏(𝒓, 𝒕), …, 𝒇𝒏(𝒓, 𝒕), r, t,𝒓𝟏, 𝒓𝟐, 𝒕𝟏, 𝒕𝟐): Stellt die Funktionen 𝒇𝟏(𝒓, 𝒕), …, 𝒇𝒏(𝒓, 𝒕) für 𝒓𝟏≤ r ≤𝒓𝟐, 𝒕𝟏≤ t ≤𝒕𝟐 in Zylinderkoordinaten dar, wobei r der Radius und t der Winkel zur positiven x-Achse gegen den Uhrzeigersinn ist. plotspherical(𝒇𝟏(𝒔, 𝒕), …, 𝒇𝒏(𝒔, 𝒕), s, t,𝒔𝟏, 𝒔𝟐, 𝒕𝟏, 𝒕𝟐): Stellt die Funktionen 𝒇𝟏(𝒔, 𝒕), …, 𝒇𝒏(𝒔, 𝒕) für 𝒔𝟏≤ s ≤𝒔𝟐 , 𝒕𝟏≤ t ≤𝒕𝟐 in Kugelkoordinaten dar, wobei s Winkel zur positiven x-Achse gegen den Uhrzeigersinn und t der Winkel zur positiven z-Achse ist. plotsurface([𝒇(𝒔, 𝒕); 𝒈(𝒔, 𝒕); 𝒉(𝒔, 𝒕)], s, t,𝒔𝟏, 𝒔𝟐, 𝒕𝟏, 𝒕𝟐): Stellt die Fläche, welche durch 𝑥 = 𝒇(𝒔, 𝒕), 𝑦 = 𝒈(𝒔, 𝒕), 𝑧 = 𝒉(𝒔, 𝒕)gegeben ist, für 𝒔𝟏≤ s ≤𝒔𝟐 und 𝒕𝟏≤ t ≤𝒕𝟐 dar. Beispielsweise liefern die Befehle

plot3d(exp(-(x^2+y^2)/4)*sin(3*(x^2+y^2)^(1/2)),x,y,-3,3,-3,3) bzw.

plot3d(x^3+sin(5*x*y)-y^3,x,y,-1,1,-1,1) die folgenden 3D-Grafiken:

Page 15: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Als besonders schwierig erweist sich die graFunktionen, welche mittels Befehl sogenannte Marching-Cubes-Algorithmusfeine Würfel ein (solche, die für den Benutzer fast Pixelgröße besitzen) und bestimmt zunächst diejenigen Würfelecken, welche im Inneren des Graphen liegen.Eckenkonstellationen werden in jedem dieser Würfeldiese Ecken „anschmiegen“ und die sich mit den Polyedern der benachbarten Würfel nahtlos zusammenfügen lassen. Eine Kugel mit dem Radius implizite Gleichung 𝑥 + 𝑦 +

plotimplicit3d(x^2+y^2+z^2=1,x,y,z,

liefert beispielsweise die folgende Grafik:

Als besonders schwierig erweist sich die grafische Darstellung räumlicher implizit gegebener Funktionen, welche mittels Befehl plotimplicit3d dargestellt werden. Hierfür wurde in MathTool der

Algorithmus implementiert. Dieser Algorithmus teilt den Raum in recht solche, die für den Benutzer fast Pixelgröße besitzen) und bestimmt zunächst

diejenigen Würfelecken, welche im Inneren des Graphen liegen. Ausgehend von bestimmten werden in jedem dieser Würfel Polyeder konstruiert, die sich bestmöglic

diese Ecken „anschmiegen“ und die sich mit den Polyedern der benachbarten Würfel nahtlos zusammenfügen lassen. Eine Kugel mit dem Radius 𝑅 = 1 beispielsweise ist gegeben durch die

𝑧 = 1, und der entsprechende Befehl

mplicit3d(x^2+y^2+z^2=1,x,y,z,-2,2,-2,2,-2,2)

liefert beispielsweise die folgende Grafik:

Darstellung räumlicher implizit gegebener Hierfür wurde in MathTool der

Dieser Algorithmus teilt den Raum in recht solche, die für den Benutzer fast Pixelgröße besitzen) und bestimmt zunächst

Ausgehend von bestimmten Polyeder konstruiert, die sich bestmöglich an

diese Ecken „anschmiegen“ und die sich mit den Polyedern der benachbarten Würfel nahtlos beispielsweise ist gegeben durch die

Page 16: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Nicht weniger kompliziert ist die Darstellung räumlicher parametrisierter Flächen (also von Flächen, welche durch die Befehle plotcylindrical, plotspherical und plotsurface dargestellt werden), da sich dort Überschneidungen ergeben können, welche bei der Darstellung beachtet werden müssen. Hierfür habe ich eine Reihe eigener Algorithmen implementiert, da mir für diese Art der Problemstellung keine gängigen Algorithmen bekannt sind.

4. Komplexe Probleme und ihre Lösungsalgorithmen

4.1 Der Risch-Algorithmus Eines der Steckenpferde von MathTool ist die Implementierung des Risch-Algorithmus für transzendente Funktionen (für beliebige Funktionen ist der Risch-Algorithmus bisher in keinem Computeralgebrasystem implementiert, da es auf der Lösbarkeit von beruht, welche im Allgemeinen unentscheidbar sind). Der Risch-Algorithmus ist ein Algorithmus, der es erlaubt, für eine gegebene elementare Funktion 𝑓(𝑥)zu entscheiden, ob es eine Stammfunktion F(x) = ∫ 𝑓(𝑥) 𝑑𝑥 besitzt, welche ebenfalls elementar (alsoin kompakter geschlossener Form) darstellbar ist. Beispielsweise liefert der Risch-Algorithmus, dass das Integral

𝑒

𝑥𝑑𝑥

Keine elementare Stammfunktion besitzt, wohl aber, dass die Funktion 𝑓(𝑥) =

( ) –

( ) ( )elementar integrierbar ist und ferner liefert der Algorithmus sogar die

Stammfunktion F(x):

𝐹(𝑥) = 𝑥

𝑥 + 𝑙𝑛(𝑥)

Moderne Computeralgebrasysteme implementieren alle den Risch-Algorithmus, zumindest für transzendente Funktionen.

4.2 Gröbnerbasen und der Buchberger-Algorithmus Ein weiteres Problem, dessen Lösung von modernen Computeralgebrasystemen (im gewissen Umfang) realisiert wird, ist das Lösung allgemeiner Gleichungssysteme. Speziell für das Lösen von polynomialen Gleichungssystemen (also von Gleichungssystemen, bei denen jede der Gleichungen ein Polynom ist) erfordert die Implementierung des Buchberger-Algorithmus. Der Buchberger-Algorithmus ermittelt zu einer gegebenen Familie von Polynomen𝑓 (𝑥 , . . . , 𝑥 ), … , 𝑓 (𝑥 , . . . , 𝑥 ) eine weitere Familie 𝑔 (𝑥 , . . . , 𝑥 ), … , 𝑔 (𝑥 , . . . , 𝑥 ) von Polynomen mit „wesentlich besseren Eigenschaften“. Die Laufzeit des Buchberger-Algorithmus ist allerdings doppeltexponentiell in der Anzahl n der Variablenin den Polynomen. Den Buchberger-Algorithmus implementiert MathTool ebenfalls und ist somit in der Lage, polynomiale Gleichungssysteme zu lösen. Wollen wir beispielsweise das Gleichungssystem 𝑥 𝑦 + 𝑥𝑦 + 𝑦 = 21, 𝑦 𝑥 − 𝑥𝑦 = 12 lösen, so wäre diese Aufgabe mit Ad-Hoc-Methoden nur schwer angreifbar. Die Theorie der Gröbnerbasen allerdings transformiert dieses Gleichungssystem in ein etwas einfacheres System, welches uns ermöglicht, alle

Page 17: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Lösungen, auch die nicht offensichtlichen, zu ermitteln. So liefert MathTool beispielsweise neben der (vielleicht leicht zu erraten) Lösung Screenshot zeigt:

4.3 Implizite räumliche Funktionen und der MarchingCubesAlgorithmus Das Plotten implizit gegebener Funktionen gehört zu den komplizierteren Aufgaben eines Computeralgebrasystems, da sich bei diesen, im Gegensatz zu expliziten Funktionen, Überschneidungen oder auch Überlagerungen ergeben können.Dieses Problem wird durch den sogenannten gesprochen, wie folgt vorgeht:

1. Der Raum wird in feine Quader unterteilt und für jede Ecke Quaderecke wird entschieden, ob diese zum Inneren oder Äußeren gehört.

2. Anhand der Eckenkonfiguration aus Schritt 1 werden bestimmte Polygone, welche das Flächenfragment im jeweiligen Quader am besten approximieren,

3. Die Polygone aus Schritt 2 werden für jeden Quader gezeichnet. Beispielsweise plottet der Befehl

plotimplicit3d(x^3*y den Graphen der implizit gegebenenund -3 ≤ z ≤ 3 und liefert die folgende grafische Ausgabe:

Lösungen, auch die nicht offensichtlichen, zu ermitteln. So liefert MathTool beispielsweise neben der (vielleicht leicht zu erraten) Lösung 𝑥 = 2, 𝑦 = 3 auch eine weitere Lösung, wie der folgende

Implizite räumliche Funktionen und der MarchingCubesAlgorithmus

Das Plotten implizit gegebener Funktionen gehört zu den komplizierteren Aufgaben eines da sich bei diesen, im Gegensatz zu expliziten Funktionen,

Überschneidungen oder auch Überlagerungen ergeben können. Dieses Problem wird durch den sogenannten Marching-Cubes-Algorithmusgelöst, welcher, grob

feine Quader unterteilt und für jede Ecke Quaderecke wird entschieden, ob diese zum Inneren oder Äußeren gehört. Anhand der Eckenkonfiguration aus Schritt 1 werden bestimmte Polygone, welche das Flächenfragment im jeweiligen Quader am besten approximieren, eingebettet.Die Polygone aus Schritt 2 werden für jeden Quader gezeichnet.

er Befehl

plotimplicit3d(x^3*y-y^3*z+z^3*x=1,x,y,z,-3,3,-3,3,-3,3)

den Graphen der implizit gegebenen Funktion𝑥 𝑦 − 𝑦 𝑧 + 𝑧 𝑥 = 1 im Bereich und liefert die folgende grafische Ausgabe:

Lösungen, auch die nicht offensichtlichen, zu ermitteln. So liefert MathTool beispielsweise neben der auch eine weitere Lösung, wie der folgende

Implizite räumliche Funktionen und der MarchingCubesAlgorithmus

Das Plotten implizit gegebener Funktionen gehört zu den komplizierteren Aufgaben eines da sich bei diesen, im Gegensatz zu expliziten Funktionen,

gelöst, welcher, grob

feine Quader unterteilt und für jede Ecke Quaderecke wird entschieden,

Anhand der Eckenkonfiguration aus Schritt 1 werden bestimmte Polygone, welche das eingebettet.

im Bereich -3 ≤ x ≤3, -3 ≤ y ≤ 3

Page 18: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Anmerkung: Das Plotten implizit gegebener zweidimensionaler Graphen funktioniert nach einem ähnlichen Prinzip, dem Marching Squares AlgorithmusMarching Cubes Algorithmus, allerdings ist dieser in der Ebene deutlich einfacher, da man weitaus weniger Fälle zu unterscheiden hat, als in drei Dimensionen.

5. Algorithmen in MathTool

5.1 Die Sprache MAL und ihre Syntax MathTool bietet auch die Möglichkeit, eigene Algorithmen zu schreiben und auszuführen. Die Syntax dieser AlgorithmenspracheMAL Syntax der objektorientierten Programmiersprache direkter Bezug auf mathematische Probleme und ihre Lösungen genommen wird.

5.2 Reservierte Zeichen und Schlüsselwörter Eine Reihe von Zeichen sind in MALwerden, da der Compiler ihnen bestimmte Funktionen zuweist. Hier ist eine Übersicht über alle reservierten Zeichen und Operatoren. Reserviertes Zeichen , ;

Das Plotten implizit gegebener zweidimensionaler Graphen funktioniert nach einem Marching Squares Algorithmus. Die Funktionsweise ist analog zu

Marching Cubes Algorithmus, allerdings ist dieser in der Ebene deutlich einfacher, da man weitaus weniger Fälle zu unterscheiden hat, als in drei Dimensionen.

Algorithmen in MathTool

und ihre Syntax

Möglichkeit, eigene Algorithmen zu schreiben und auszuführen. Die Syntax (MathTool Algorithm Language) orientiert sich sehr stark an der

Syntax der objektorientierten Programmiersprache Java, ist jedoch einfacher gestrickt, dadirekter Bezug auf mathematische Probleme und ihre Lösungen genommen wird.

Reservierte Zeichen und Schlüsselwörter

in MAL reserviert und dürfen nur im bestimmten Kontext verwendet en bestimmte Funktionen zuweist. Hier ist eine Übersicht über alle

reservierten Zeichen und Operatoren.

Bedeutung Trennung zwischen ParameternTrennung von Befehlen

Das Plotten implizit gegebener zweidimensionaler Graphen funktioniert nach einem Die Funktionsweise ist analog zu dem des

Marching Cubes Algorithmus, allerdings ist dieser in der Ebene deutlich einfacher, da man weitaus

Möglichkeit, eigene Algorithmen zu schreiben und auszuführen. Die Syntax orientiert sich sehr stark an der

, ist jedoch einfacher gestrickt, da hier speziell

reserviert und dürfen nur im bestimmten Kontext verwendet en bestimmte Funktionen zuweist. Hier ist eine Übersicht über alle

Trennung zwischen Parametern

Page 19: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

{ und } Beginn und Ende eines Blocks ( und ) Beginn und Ende einer Methodenklammer oder

einer Bedingung in einer Kontrollstruktur [ und ] Beginn und Ende einer Matrix & Und | Oder ! Negation = Zuweisung == Vergleich auf Wertegleichheit > Größer als >= Größer oder gleich < Kleiner als <= Kleiner oder gleich + Addition von Ausdrücken Ebenso ist eine Reihe von Schlüsselwörtern in MAL reserviert und dürfen nur im bestimmten Kontext verwendet werden, da der Compiler ihnen bestimmte Bedeutungen zuweist. Hier ist eine Übersicht über alle reservierten Schlüsselwörter.

Schlüsselwort Bedeutung main Name des Algorithmus für den Einstiegspunkt false Wahrheitswert „falsch“ true Wahrheitswert „wahr“ return Ausstiegspunkt für einen Algorithmus und

Anweisung für die Rückgabe eines Bezeichners, wenn nötig.

break Abbruch einer Schleife continue Anweisung, in einer Schleife fortzufahren if Wenn else Sonst while Beginn einer While-Kontrollstruktur do Beginn einer Do-While-Kontrollstruktur for Beginn einer For-Schleife

5.3 Aufbau und Prinzipien von MAL In einer Algorithmendatei können beliebig viele Algorithmen implementiert sein, sofern sie den folgenden Bedingungen genügen:

1. Die Algorithmen haben alle verschiedene Signaturen. Eine Signatur besteht immer aus dem Namen des Algorithmus sowie aus dem geordneten Tupel von Eingabeparametertypen.

2. Es existiert ein Algorithmus mit dem Namen „main“, welcher parameterlos ist. Der Rückgabetyp kann beliebig sein (und auch leer). Dieser Algorithmus ist, ähnlich wie es in einer klassischen Java-Anwendung der Fall ist, der Haupteinstiegspunkt.

3. Bis auf wenige Ausnahmen sind Aufrufe von Unteralgorithmen (also Algorithmen, die nicht den Namen „main“ tragen) immer Call-By-Value. Letzteres bedeutet, dass falls ein Inputparameter innerhalb des Unteralgorithmus einen neuen Wert zugewiesen bekommen, dieser dann nach Beenden des Aufrufs des Unteralgorithmus seinen ursprünglichen Wert (also den Wert, welchen dieser unmittelbar vor dem Aufruf des Unteralgorithmus besessen hatte) wieder annimmt. Die (bisher) einzigen Unteralgorithmen, welche nach dem Call-By-Reference-Prinzip arbeiten, sind die MAL-internen Methoden inc und dec, welche als einzigen

Page 20: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Parameter eine Variable vom Typ expression übergeben bekommen. Inc erhöht dabei den Wert der übergebenen Variablen um 1, dec senkt diesen um 1.

5.4 Datentypen MAL kennt hier zunächst vier verschiedene Datentypen, welche in der folgenden Übersicht zu finden sind:

Datentyp Bedeutung expression Arithmetischer Ausdruck booleanexpression Boolscher Ausdruck matrixexpression Matrizenausdruck string Zeichenkette (String)

1. Der Datentyp expression, also einen mathematischen Ausdruck.Hierbei wird nicht weiter unterschieden, der Ausdruck eine ganze Zahl (welche in vielen Programmiersprachen als int oder integer angegeben wird) oder ein komplexer Ausdruck ist.

Beispiel: expression a = 15;

2. Der Datentyp matrixexpression, also ein Matrizenausdruck.

Beispiel:matrixexpression a = [1,2;4,1+x;2,7]; Dabei sei x eine bereits definierte Variable vom Typ expression.

3. Der Datentyp booleanexpression, also ein boolscher Ausdruck. Beispiel:booleanexpression a = x >= 24; Dabei sei x eine bereits definierte Variable vom Typ expression.

4. Der Datentyp string, also eine Zeichenkette. Beispiel:string a = “Die Variable x hat den Wert “+a; Dabei sei x eine bereits definierte Variable eines beliebigen Typs, beispielsweise des Typsexpression.

5.5 Standardbefehle und Standardalgorithmen MAL kennt auch einige vordefinierte Befehle und Algorithmen. Es folgt eine vollständige Liste der in MAL definierten Befehle: Rückgabetyp und Signatur Definition inc(expression) Erhöht den Wert des Parameters um 1. dec(expression) Reduziert den Wert des Parameters um 1. expression Gibt den (i,j)-Eintrag der Matrix im 1. Parameter,

Page 21: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

entry(matrixexpression,expression,expression) wobei i der zweite und j der 3. Parameter ist, falls sich der Matrizenausdruck im 1. Parameter zu einer Matrix vereinfachen lässt. Wichtig: Die Indexzählung beginnt bei 0.

print(expression) Gibt den Parameter in der Konsole aus. print(matrixexpression) Gibt den Parameter in der Konsole aus. print(booleanexpression) Gibt den Parameter in der Konsole aus. print(string) Gibt den Parameter in der Konsole aus. approx(expression) Gibt den approximierten Wert des eingegebenen

Ausdrucks zurück. Achtung: Alle Ausdrücke oder Matrizenausdrücke, die einen approximierten Ausdruck verwenden, werden ebenfalls approximiert.

approx(matrixexpression) Gibt den approximierten Wert des eingegebenenMatrizenausdrucks zurück. Achtung: Alle Ausdrücke oder Matrizenausdrücke, die einen approximierten Matrizenausdruck verwenden, werden ebenfalls approximiert.

5.6 Beispiele Es folgen einige Codebeispiele mit einer detaillierten Diskussion.

5.6.1 Beispiel 1: Der erste Algorithmus Wir betrachten den folgenden Code: expression main(){ expression result=1; if(result>0){ result=3*result; } return result; } Ausführung dieses Codes liefert uns die folgende Ausgabe:

Dem Bezeichner 𝑟𝑒𝑠𝑢𝑙𝑡 wird zunächst der Wert 1 zugewiesen. Die Abfrage, ob 𝑟𝑒𝑠𝑢𝑙𝑡 > 0 ist, liefert true, und somit wird result auf den Wert 3 ∗ 𝑟𝑒𝑠𝑢𝑙𝑡 = 3 gesetzt. Danach wird 𝑟𝑒𝑠𝑢𝑙𝑡ausgegeben.

Page 22: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

5.6.2 Beispiel 2: Aufruf weiterer Algorithmen Wir betrachten den folgenden Code: expression main(){ expression a=1; for(expression i=0,f(i)<=10,i=i+g(i)){ a=3*a+2; } return a; } expression f(expression i){ return 2*i; } expression g(expression i){ return i^2+1; } Nach der Ausführung dieses Codes wird für den Ausgabeparameter a das Ergebnis 53 zurückgegeben. Die Berechnung erfolgt hier wie folgt:

In der For-Schleife nimmt i die folgenden Werte an: i = 0, i = 1 und i = 3 gemäß der Inkrementierungsanweisung 𝑖← 𝑖 + 𝑔(𝑖) = 𝑖 + 𝑖 + 1. Somit wird 𝑎 dreimal ersetzt durch 3 ∗ 𝑎 + 2, was nacheinander die Werte 5, 17 und 53 liefert.

5.6.3 Beispiel 3: Algorithmus mit Matrizen Wir betrachten den folgenden Code: matrixexpression main(){ matrixexpression a=[1,2;3,4]; for(expression i=0,i<=3,i=i+1){ a=a^2; } return a; } Hier wird also 4 Mal die Matrix a quadriert, das Ergebnis wird also die Matrix

𝑎 =115007491351 167615035490251422553235 366430044586

sein. Ausführung dieses Codes liefert uns die folgende Ausgabe:

Page 23: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

5.6.4 Beispiel 4: Fehler aufgrund fehlender Wertrückgabe Der Algorithmus expression main(){ expression result=1; if(result>0){ result=3*result; } } liefert beim Kompilieren einen Fehler, da hier als Rückgabewert ein Ausdruck (expression) verlangt wird, dieser aber nichts zurückgibt. 5.7 Code generieren Der Algorithmencompiler von MathTool bietet zudem eine kleine Hilfe zum Generieren von Codes an. Bevor wir uns etwas näher mit dieser Generierungshilfe befassen, sei an dieser Stelle bereits gesagt, dass der auf diese Weise generierte Code nicht notwendigerweise auch kompilierbar bzw. ausführbar ist. Dies ist auf die folgenden Gründe zurückzuführen:

1. Man kann zwar Methodenrümpfe generieren lassen, welche jedoch ohne Rückgabewert sind. Dieser muss stets manuell ergänzt werden. Ein direktes Kompilieren würde, jedenfalls in den Fällen, in denen eine Methode einen Rückgabewert erwartet, einen entsprechenden Fehler werfen.

2. Wenn man Befehle mit Parametern generiert, so kann man den Parameternamen zwar frei wählen, jedoch ist nicht gesichert, dass dieser Parameter im Code vorher auch definiert ist. Dies sicherzustellen obliegt dem Benutzer.

3. Bei der Definition mathematischer Ausdrücke prüft der Compiler nicht auf Syntaxkorrektheit. 4. Beim Generieren von Kontrollstrukturen müssen zwar alle notwendigen Bedingungen

angegeben werden, es wird jedoch nicht auf syntaktische Korrektheit geprüft. Auch dies ist vom Benutzer vorher sicherzustellen.

Im Folgenden gehen wir ein wenig näher auf einzelne Mechanismen zum Generieren von Befehlen ein.

5.7.1 Hauptalgorithmus und Unterroutinen generieren

Page 24: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

Unter Code > Code generieren > Hauptalgorithmus generieren erscheint eine GUI, in der man den Rückgabewert des Hauptalgorithmus festlegen kann. Bei einer leeren Auswahl ist der Rückgabewert entsprechend leer. Unter Code > Code generieren >Unterroutine generieren erscheint eine GUI, in der man den Namen, den Rückgabewert und die einzelnen Parameter derUnterroutine festlegen kann. Bei einer leeren Auswahl ist der Rückgabewert der Unterroutine entsprechend leer. Die einzelnen Parameter können natürlich auch wieder entfernt werden, falls dem Benutzer ein Fehler unterlaufen ist.

5.7.2 Bezeichnerdefinition generieren Unter Code > Code generieren >Befehl generieren >Bezeichnerdefintion generieren erscheint eine GUI, in der man den Typ, den Namen und den Wert des zu neuen Bezeichners festlegen kann. Der Befehl kann auch generiert werden, wenn kein Wert festgelegt wurde. In diesem Fall wird eine reine Bezeichnerdeklaration ohne Wertzuweisung generiert.

5.7.3 Kontrollstrukturen generieren Unter Code > Code generieren >Kontrollstruktur generieren kann man eine beliebige in MAL zulässige Kontrollstruktur generieren. Beispielsweise kann man dann unter > Wenn-Dann-Kontrollstruktur generierenunter Eingabe einer boolschen Bedingung eine If-Else-Kontrollstruktur generieren.

Page 25: MathTool manual - DE - Sergei Kovalenkosergei-kovalenko.de/wp-content/uploads/2016/07/MathTool-manual-v… · í x î v o Ç ] x x x x x x x x x x x x x x x x x x x x x x x x x x

5.7.4 Rückgabebefehl generieren Unter Code > Code generieren >Befehl generieren >Rückgabebefehl generieren erscheint eine GUI, in der man den Namen des zurückzugebenden Bezeichners festlegen kann.

5.8 In den nächsten Versionen Die Sprache MAL befindet sich noch im Aufbau. Entsprechend sind viele nützliche Features noch nicht implementiert. In den nächsten Versionen ist beispielsweise ein Umgang mit Arrays geplant, damit beispielsweise Lösungen von Gleichungen darin abgelegt und weiter behandelt werden können.Ebenso wird demnächst ein Debug-Modus implementiert, welcher die Fehlersuche erheblich verbessert.