Arbeiten mit Maple - Angewandte Mathematik (B.Sc.)

Die Seite wird erstellt Marlene Brunner
 
WEITER LESEN
Arbeiten mit Maple - Angewandte Mathematik (B.Sc.)
Arbeiten mit Maple
              Einführung in ein Computeralgebrasystem

                       Jerome Reyes-Rodriguez

  Mithilfe von Computeralgebrasystemen wie Maple kann man Berechnungen
exakt durchführen. Dazu werden besondere Variablentypen und symbolische
Algorithmen genutzt. Im Gegensatz zur numerischen Berechnung können mit
beliebig kleinen oder großen Zahlen gearbeitet werden. Auch ist es möglich,
nach verschiedenen mathematischen Gesetzen, Umformungen durchzuführen.
Dies sind nur einige Fähigkeiten von Computeralgebrasystemen (CAS).
  In dieser Einführung wird zunächst erklärt, was Computeralgebrasysteme
überhaupt sind und wie sie arbeiten. Ihre Arbeitsweise wird anhand eines Bei-
spiels mit Polynomen gezeigt. Danach werden unterschiedliche CAS verglichen
und deren Vor- und Nachteile hervorgehoben.
  Im zweiten Teil wird der Umgang mit Maples Benutzeroberfläche bespro-
chen. Danach werden einige für die Mathematik wichtige Variablentypen ein-
geführt. In Abschnitt 7 werden nützliche und direkt ausführbare Prozeduren
vorgeführt. Im vorletzen Abschnitt wird kurz gezeigt, wie man schlichte Zeich-
nungen und Animationen in Maple kreirt. Zuletzt wird das Programmieren mit
Maple in kurzen Beispielen demonstriert und die Syntax der einzelnen Befehle
erklärt.
Arbeiten mit Maple - Angewandte Mathematik (B.Sc.)
Inhaltsverzeichnis

I.   Computeralgebrasysteme - CAS                                                                              1

1. Was ist ein Computeralgebrasystem                                                                           1

2. Polynome in Computeralgebrasystemen                                                                         2
   2.1. Präfixnotation: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                    2
   2.2. Notation mittels Koeffizienten: . . . . . . . . . . . . . . . . . . . . . . . . .                      2

3. So arbeitet ein Computeralgebrasystem                                                                       3

4. Welche Vor- und Nachteile haben die verschiedenen CAS?                                                      5

II. Maple                                                                                                      6

5. Die Benutzeroberfläche in Maple                                                                             6
   5.1. Worksheet- und Document Mode . . . . . . . . . . . . . . . . . . . . . . . .                           6
   5.2. Wichtiges zu der Werkzeugleiste . . . . . . . . . . . . . . . . . . . . . . . .                        7

6. Mathematische Objekte                                                                                        7
   6.1. Ausdrücke und Funktionen . . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .    8
        6.1.1. Gleichungen . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .    8
        6.1.2. Stückweise definierte Funktionen . . . . . . . . . . .      .   .   .   .   .   .   .   .   .    9
   6.2. Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .    9
        6.2.1. Erzeugen von Mengen . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .    9
        6.2.2. Elementare Mengenoperationen . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   10
   6.3. Punkte, Geraden und Ebenen . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   11
        6.3.1. 2D Punkte und Geraden erstellen . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   11
        6.3.2. 3D Punkte und Geraden erstellen . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   11
        6.3.3. Einige Prozeduren im geometry- und geom3d-Paket             .   .   .   .   .   .   .   .   .   12
   6.4. Vektoren und Matrizen . . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   13
        6.4.1. Vektoren und Matrizen erstellen . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   13
        6.4.2. Auf den Inhalt von Vektoren und Matrizen zugreifen          .   .   .   .   .   .   .   .   .   15
        6.4.3. Rechnen mit Vektoren und Matrizen . . . . . . . . .         .   .   .   .   .   .   .   .   .   16

7. Prozeduren für verschiedene Mathematische Themengebiete                                                     18
   7.1. Wichtige Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                      18
   7.2. Gleitkommadarstellung von Lösungen . . . . . . . . . . . . . . . . . . . . .                           18
   7.3. Lineare Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                    19
        7.3.1. Lösen linearer Gleichungssysteme . . . . . . . . . . . . . . . . . . . .                        19
        7.3.2. Berechnen der Diagonalform/Jordanschen Normalenform einer Matrix                                20
        7.3.3. Gram-Schmidt Orthogonalisierung . . . . . . . . . . . . . . . . . . .                           20
   7.4. Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                   21
        7.4.1. Grenzwerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                      21
        7.4.2. Partialbruchzerlegung . . . . . . . . . . . . . . . . . . . . . . . . . .                       21
        7.4.3. Ableitungen und Integrale . . . . . . . . . . . . . . . . . . . . . . . .                       21
   7.5. Gewöhnliche Differentialgleichungen . . . . . . . . . . . . . . . . . . . . . .                        23
   7.6. Integraltransformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                     23

                                               I
8. Graphische Darstellung und Animationen                                                                                                             24
   8.1. Zeichnungen . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
        8.1.1. 2D- Plot . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
        8.1.2. 3D- Plot . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
   8.2. Animationen . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27

9. Programmieren in Maple                                                                                                                             28
   9.1. Einlesen von Daten . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
   9.2. Eigene Prozeduren erstellen       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
   9.3. Schleifen . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
   9.4. Verzweigungen . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
        9.4.1. Bedingungen . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32

                                                      II
Teil I.
Computeralgebrasysteme - CAS
Wenn es darum geht, exakte Rechenergebnisse zu erhalten, so kann uns die Gleitkomma-
rechnung in C oder Matlab nicht weiterhelfen. Diese Programme sind dadurch beschränkt,
dass Zahlen nur mit endlicher Länge gespeichert werden und die Rechenoperationen meist
numerische Fehler erzeugen.
Ein Vorteil der numerischen Berechnung ist ihre Geschwindigkeit. Das errechnete Ergebnis
kann dabei ausreichend genau sein, falls der Fehler bei den Berechnungen beschränkt und
klein genug bleibt. Das Ziel der Numerik ist es daher für verschiedene numerische Methoden
Fehlerabschätzungen zu finden und Konvergenzkriterien anzugeben.
In Computeralgebrasystemen wie Maple hingegen, kann man mit Zahlen beliebiger Größe
rechnen und erhält exakte Ergebnisse. Was Computeralgebrasysteme (Abkürzung: CAS)
sonst noch können wird in den folgenden Kapiteln besprochen.

1. Was ist ein Computeralgebrasystem
Computeralgebrasysteme sind Programme die dazu konzipiert wurden, mathematische
Umformungen und Berechnungen symbolisch durchzuführen. Beim symbolischen Rechnen
werden Variablen und Konstanten als eigene Objekte im Algebrasystem gespeichert. Diese
werden nicht ausgewertet und bleiben bei Umformungen erhalten. Dies hat gegenüber der
numerischen Variante den Vorteil, exakte Ergebnisse zu liefern.
Um symbolisch zu rechnen muss man dem Computer die Arbeit mit mathematischen
Strukturen beibringen. Das Anwenden von Äquivalenzumformungen, das Rechnen mit ra-
tionalen Zahlen oder das Lesen von Ergebnissen aus Integrationstabellen sind Beispiele für
Operationen, die als Algorithmen in CAS enthalten sind. Dadurch sind solche Programme
in der Lage jeden einzelnen Schritt von Handrechnungen nachzuahmen.
Zu den Fähigkeiten von Algebrasystemen gehören:

   • Das Lösen von linearen- und nichtlinearen Gleichungen.

   • Das Lösen von vielen Differential- und partiellen Differentialgleichungen.

   • Exaktes Rechnen mit beliebig großen Zahlen, Brüchen und Wurzeln.

   • Rechnen mit Variablen und Konstanten.

   • Arbeiten mit Mengen, Vektoren, Matrizen und anderen mathematischen Objekten.

Im Folgenden betrachten wir zwei Beispiele. Im ersten wird gezeigt, wie ein mathematisches
Objekt innerhalb eines Computeralgebrasystems aussieht. Im zweiten wird betrachtet wel-
che Operationen vom CAS durchgeführt werden um zwei Ausdrücke auszumultiplizieren.

                                            1
2. Polynome in Computeralgebrasystemen
Eine mathematische Struktur die in Algebrasystemen implementiert ist, sind Polynom-
ringe. Hier wollen wir uns ansehen, wie Polynome in einer Variablen innerhalb von CAS
gespeichert werden.
Es gibt drei verschiedene Darstellungstypen:

2.1. Präfixnotation:
Polynome werden als Liste von Wörtern abgespeichert. Die Addition wird dabei mit add,
die Multiplikation mit multiply, symbolische Variablen mit symbol und Zahlen mit dem
Schlagwort number gekennzeichnet. Um die Reihenfolge der Rechenoperationen anzuzei-
gen, nutzt man die sogenannte Baumdarstellung. Durch Einrücken wird angezeigt, welche
Operation wann ausgeführt wird. Mit dieser Notation kann man alle mathematischen
Ausdrücke, mit geeigneten Schlagwörtern, darstellen.

Notation 1:
     4x2 + 3x − 7 wird abgespeichert als
        add
              multiply
                 symbol ( " x " )
                 symbol ( " x " )
                 number ( 4 )
              multiply
                 symbol ( " x " )
                 number ( 3 )
              number( −7)

2.2. Notation mittels Koeffizienten:
Möchte man nur mit Polynomen rechnen, genügt es die Koeffizienten ai der Polynome
n
X
      ai xi in einer Liste zu speichern. Die verschiedenen Rechenoperationen für Polynome
i=0
müssen dann mit den Listen verwirklicht werden. Im Vergleich mit der Präfixnotation ist
die Koeffizientennotation bei den Rechnungen viel schneller.

Notation 2:
     4x2 + 3x − 7 wird abgespeichert als
        (4 , 3 , 7)

Für Polynome wie 7x1000 − 1 würde man in der Liste 999 mal den Wert 0 als Koeffizient
speichern. Daher nutzt man bei solchen Ausdrücken eine dritte Notation. Hierbei wird zu
dem jeweiligen Koeffizenten zusätzlich ihre Potenz in der Liste gespeichert.

Notation 3:
     7x1000 − 1 wird abgespeichert als
        ( ( 1 0 0 0 2 ) , ( 0 −1))

                                             2
Die drei Repräsentationen von Polynomen müssen also je nach Problemstellung gewählt
werden:

Notation 1 Wenn man mit polynomialen und nichtpolynomialen Ausdrücken rechnen möch-
           te                       √
           ( Bsp.: (2x2 + 4x)(3x−3 + 7x) )

Notation 2 Wenn das Polynom im Verhältnis zum Grad viele Koeffizienten besitzt die
           ungleich 0 sind.

Notation 3 Wenn das Polynom im Verhältnis zum Grad fast keine Koeffizienten ungleich
           0 besitzt.

3. So arbeitet ein Computeralgebrasystem
Mit der in Abschnitt 2.1 beschriebenen Präfixnotation, wird nun das Ausmultiplizieren
zweier Polynome im CAS, Schritt für Schritt erklärt. Hierbei nutzt das Algebrasystem
vordefinierte Rechengesetze wie die Distributionsregel.
In Maple kann man den Ausdruck (x + 7)(x + 6) mit dem Befehl expand() ausmultipli-
zieren.
Folgende Schritte werden dann durchgeführt:

  1. Stelle den Ausdruck (x + 7)(x + 6) mit       3. Da immer noch ein add unter einem
     der Präfixnotation dar.                         multiply steht muss die Distributi-
                                                     onsregel noch einmal ausgeführt wer-
     multiply                                        den.
       add
           symbol ( " x " )
           number ( 7 )
       add
           symbol ( " x " )
           number ( 6 )                             add
                                                          add
  2. Da unter einem multiply ein add                        multiply
     steht, wird die Distributionsregel an-                     symbol ( " x " )
     gewandt.                                                   symbol ( " x " )
                                                            multiply
                                                                number ( 7 )
     add                                                        symbol ( " x " )
           multiply                                       multiply
             add                                            add
                 symbol ( " x " )                               symbol ( " x " )
                 number ( 7 )                                   number ( 7 )
             symbol ( " x " )                               number ( 6 )
           multiply
             add
                 symbol ( " x " )
                 number ( 7 )
             number ( 6 )

                                              3
4. Und ein drittes mal wird die Distribu-       6. Die unteren zwei Zahlen kann man
   tionsregel angewandt.                           ausmultiplizieren.

                                                  add
   add                                                  multiply
         add                                              symbol ( " x " )
               multiply                                   symbol ( " x " )
                 symbol ( " x " )                       multiply
                 symbol ( " x " )                         number ( 7 )
               multiply                                   symbol ( " x " )
                 number ( 7 )                           multiply
                 symbol ( " x " )                         symbol ( " x " )
         add                                              number ( 6 )
               multiply                                 multiply
                 symbol ( " x " )                         number ( 4 2 )
                 number ( 6 )
               multiply                         7. Als nächstes kann man Terme mit
                 number ( 7 )                      dem symbol(“x“) zusammenfassen.
                 number ( 6 )
                                                  add
                                                        multiply
                                                          symbol ( " x " )
                                                          symbol ( " x " )
                                                        multiply
                                                          number ( 1 3 )
                                                          symbol ( " x " )
                                                        multiply
5. Nun kann man andere Regeln nutzen.                     number ( 4 2 )
   Wenn zwei add untereinander stehen,
   kann die zuerst ausgeführten Additio-        8. Die Multiplikation von x mit sich
   nen weglassen werden.                           selbst kann als Quadrat mit dem
                                                   Schlagwort square zusammengefasst
                                                   werden.
   add
         multiply                                 add
           symbol ( " x " )                             square
           symbol ( " x " )                                symbol ( " x " )
         multiply                                       multiply
           number ( 7 )                                    number ( 1 3 )
           symbol ( " x " )                                symbol ( " x " )
         multiply                                       number ( 4 2 )
           symbol ( " x " )
           number ( 6 )                         9. Jetzt gibt es keine Regel mehr, die
         multiply                                  angewendet werden muss und man er-
           number ( 7 )                            hält das Ergebnis.
           number ( 6 )
                                                  x^2 + 13 x + 24

                                            4
4. Welche Vor- und Nachteile haben die verschiedenen CAS?
Im Vergleich unterscheiden sich die Computeralgebrasysteme in ihrer Geschwindigkeit,
den Platz den sie im Arbeitsspeicher benötigen und der Anzahl der Aufgaben die gelöst
werden können. Auf der Homepage von Nasser M. Abassi gibt es einen unabhängigen
Integrations-Test verschiedener Computeralgebra-Software. Dieser wurde im August 2015
durchgeführt und vergleicht die Programme Rubi, Mathematica, Maple und Mupad. Auf
der Seite von Albert Rich Rubi sind alle mathematischen Probleme aufgelistet, die in
diesem Test durchgearbeitet wurden.
Das Ergebnis der Tests wurde in Folgender Tabelle zusammengefasst:

   System       percentage  not        mean        median   mean    median median      median
                 solved    solved      CPU          CPU     size     size  normali-    normali-
                                       (sec)        (sec)                    zed         zed
                                                                             size        size
   Rubi          99.903        50      0.840       0.185     140.2   103    0.997       1.000
 Mathematica     96.731      1689      2.407       0.168    2284.8    99    7.674       1.000
   Maple         88.276      6058      0.123       0.017    26054.2 130    141.592      1.298
  Mupad          54.750      23381     1.940       0.234     796.1    87    3.905       1.125

Tabelle 1: Ergebnisse der Computer Algebra Testläufe, Tabelle ist auf der Homepage von
           M. Abassi zu finden

Aus dieser Tabelle kann man entnehmen, dass Mathematica (Rubi ist ein Plugin für Ma-
thematica) die meisten Probleme lösen kann. Matlab versagt bei vielen der 51671 gestellten
Problemen, benötigt aber am wenigsten Speicherplatz. Maple ist nicht weit hinter Mathe-
matica, was die Anzahl der gelösten Probleme angeht, kann aber zusätzlich durch seine
Geschwindigkeit Punkten.
In diesem Test wurden aber nur Integrationsprobleme betrachtet. Wenn es zum Beispiel
um das Lösen von Differential- und partiellen Differentialgleichungen geht findet Maple im
Moment die meisten symbolischen Ergebnisse. Retardierte Differentialgleichungen (Eng-
lisch: Delayed Differential Equations) oder Differential-algebraische Gleichungen hingegen,
können nur von Mathematica gelöst werden.

                                               5
Teil II.
Maple
In unseren Computerlaboren sind zur Zeit zwei Computeralgebrasysteme vorhanden. Zum
einen die symbolische Toolbox von Matlab namens MuPad und zum anderen das von
Maplesoft entwickelte Maple. Im Vergleich zu MuPad ist Maple die stärkere Computeral-
gebrasoftware und hat eine klare und einfach zu bedienende Oberfläche.
Die Entwicklung von Maple (mathematical manipulation language) wurde 1980 von der
Symbolic Computational Group an der Universität von Waterloo in Kanada begonnen.
Nach der Firmengründung von Maplesoft in 1988 wurde das Programm vermarktet und
wird bis heute ständig weiterentwickelt.
Maple selbst wurde mithilfe zweier Programmiersprachen geschrieben. Der Systemkern
(Kernel) von Maple, der die Maple-Programmiersprache enthält wurde in C programmiert,
die Bedienoberfläche hingegen mit Java.
In den folgenden Abschnitten werden wir uns mit der Bedienung von Maple auseinander
setzen und danach verschiedene mathematische Probleme in kleinen Beispielprogrammen
lösen.

5. Die Benutzeroberfläche in Maple
Öffnet man Maple, so wird man zunächst feststellen, dass die Sprache der Oberfläche
Englisch ist. Das gleiche gilt für die Maple-Hilfe. Zurzeit gibt es kein deutsches Sprachpaket
für Maple. Hat man Schwierigkeiten mit Englisch, so helfen hier nur Wörterbücher und
Online-Übersetzer.
Auf dem Linken Rand der Bedienoberfläche sind viele anklickbare Register, wie „Expres-
sion“ zu sehen. Mit ihnen kann man nahezu alle mathematischen Aufgaben per Klick         ´ er-
stellen und lösen. Hat man in dem Register „Expression“ zum Beispiel das Integral f dx
gewählt, so kann man das f mit irgendeiner Funktion ersetzen und mit dem Drücken
der Eingabetaste auswerten. Zusätzlich gibt es die Möglichkeit, durch Rechtsklick auf den
Ausdruck, viele andere Operationen, wie das Auswerten an einem Punkt (Evaluate at a
Point), durchzuführen.
In dieser Einführung werden wir uns nicht näher mit der Benutzeroberfläche befassen. Eine
ausführliche Beschreibung aller Funktionen der Oberfläche ist in dem Benutzerhandbuch
von Maple [1] zu finden. Wir werden uns näher mit den Befehlen beschäftigen, die hinter
den anklickbaren Operationen stecken.

5.1. Worksheet- und Document Mode
Unter File→New sind zwei mögliche Modi zu finden, in denen man arbeiten kann. Um
Lösungen mathematischer Probleme zu finden, sind beide Modi gleichwertig. Sie unter-
scheiden sich nur in der Darstellung der Ein- und Ausgabe. Eine ausführliche Beschreibung
der Unterschiede findet man auf Maples Internetseite.
Der Worksheet Modus enthält die klassische Umgebung, mit der man in Maple pro-
grammiert. In ihm werden Befehle ausgeschrieben und einzelne Eingaben mit        getrennt.
Im Document Modus werden die Befehle und Ausgabe schön formatiert als 2D-Mathematik
ausgegeben. In Maple gibt es hierzu 2D-Input und 2D-Output. Die Ausgabe wird, im ge-
gensatz zur 1D-Ausgabe, wie per Hand geschrieben, ausgegeben.

                                              6
ˆ    4
                x−2
2D-Mathe:           = 1,            x2 dx
                 α          0

1D-Mathe:      (x − 2)/alpha = 1, int(x2 , x = 0..4)

Der Document Modus kann dazu genutzt werden, interaktive Dokumente zu erstellen.
Im Menüpunkt File→New→Templates... gibt es viele Beispiele solcher interaktiver Do-
kumente. In ihnen werden verschiedene mathematische Probleme gelöst und Schritt für
Schritt beschrieben.
In beiden Modi können Befehle mit der Eingabetaste ausgeführt werden und mit Um-
schalt + Eingabe wird die Ausführung verhindert. Mit dem Semikolon „;“ werden Be-
fehle beendet und im der 1D-Eingabe muss am Ende ein Semikolon gesetzt werden. Der
Doppelpunkt „:“ kann dazu genutzt werden, die Ausgabe von Befehlen zu unterdrücken.
Kommentare kann man mit dem Rautezeichen „#“ erstellen. Die Hilfe zu bestimmten
Prozeduren kann man mit ? Prozedurname aufrufen.
In diesem Skript werden wir immer im Worksheet Modus arbeiten.

5.2. Wichtiges zu der Werkzeugleiste
Eine praktische Funktion der Werkzeugleiste sind die Ausrufezeichen      . Mithilfe der
drei Ausrufezeichen kann man alle, auf dem Dokument befindlichen, Anweisungen nach-
einander ausführen lassen. Das einfache Rufezeichen führt nur die Anweisung aus, in der
sich der Mauszeiger gerade befindet.
In der Werkzeugleiste direkt über dem Arbeitsbereich

                Abbildung 1: Werkzeugleiste mit verschiedenen Reitern

gibt es für Text, Mathe, Zeichnungen und Animationen verschiedene Reiter. Hierbei
muss man darauf achten, dass man im Document Modus mit der Option Text keine
ausführbaren Anweisungen schreiben kann. Die Eingabe ist nur alls Kommentar ohne
Rautezeichen gedacht. Im Worksheet Modus kann man mit der Text Option Befehle
eingeben. Diese müssen dann aber mit Semikolon „;“ beendet werden.

6. Mathematische Objekte
In Maple kann man mit allen Datentypen arbeiten, die auch in C zur Verfügung stehen.
Diese sind nicht alle beim Start von Maple nutzbar. Daher muss man mit dem Befehl
with() gegebenenfalls die nötigen Bibliotheken laden. Informationen zu den gewünschten
Datentypen findet man in der Maple-Hilfe.
Hier möchten wir uns nur auf die mathematischen Objekte, wie Mengen, Matrizen und
Funktionen beschränken.
Wichtig: Die Zuweisung von Variablen wird in Maple mit „:=“ durchgeführt. Das Gleich-
heitszeichen alleine wird für Gleichungen verwendet!

                                            7
6.1. Ausdrücke und Funktionen
Abbildungen und Gleichungen können in Maple in zwei Datentypen gespeichert werden.
Bei Ausdrücken (engl.: expression) muss lediglich das gewünschte Objekt mit „:=“ zu-
gewiesen werden.

 [> F:=x ^2+4;

Bei Funktionen (engl.: function) wird zusätzlich angegeben welche Variable im Urbild
auf das Objekt abgebildet werden soll. Die Abbildungsvorschrift wird mit einem Pfeil „->“
(Bindestrich + größer Zeichen) angezeigt.

 [> F:=x−>x ^2+4;

Audrücke können nur mit dem zusätzlichen Befehl subs(·), Funktionen hingegen mit
mit runden Klammern F (·) ausgewertet werden. Weitere unterschiede und Beispiele sind
in der unteren Tabelle zu finden.

                                       Ausdrücke           Funktionen
                Eingabe               F := x2 − 4;     F := x− > x2 − 4;
                Auswertung          subs(x = 3, F );          F (3);
                Gleichung lösen      solve(F = 0);      solve(F (x) = 0);
                Ableitung             dif f (F, x);          D(F );

        Tabelle 2: Unterschiede zwischen Ausdrücken und Funktionen in Maple

Setzt man in Funktionen eine symbolische Variable ein, so erhält man einen Ausdruck.
F (x) wird dann zum Ausdruck x2 − 4 und man kann Befehle, die nur Ausdrücke als
Übergabewert annehmen, verwenden. Die Auswertung einer Funktion ist dann auch mit
subs(x = 3, F (x)) möglich.
Intern speichert Maple Funktionen als kleine Programme. Beispielsweise wird die Funk-
tion y := x− > x2 als y := proc(x) x^2 end; abgespeichert. Was in C Funktionen sind
( int function( ){ } ) wird in Maple Prozedur genannt. Wie diese aufgebaut sind, werden
wir uns in Abschnitt 9.2 ansehen.

6.1.1. Gleichungen
Das Gleichheitszeichen „=“ kann genutzt werden um Gleichungen als Ausdrücke zu
speichern. Auf die einzelnen Seiten der Gleichung kann man mit den Befehlen rhs() (righ
hand side) und lhs() (left hand side) zugreifen. Mit der solve()-Prozedur kann man die
Gleichung lösen.

                                           8
[>   g:=x^2−3=4∗x+4;
 [>   rhs ( g ) ;
 [>   lhs (g );
 [>   solve (g , x );

                                     x2 − 3 = 4x + 4
                                                    4x + 4
                                                   x2 − 3
                                         √           √
                                    2+       11, 2 − 11

6.1.2. Stückweise definierte Funktionen
Die Prozedur piecewise() ermöglicht die definition von zusammengesetzten Abbildungen.
Diese können als Ausdrücke oder Funktionen gespeichert werden. Als Argument erhält
die Prozedur immer einen Geltungsbereich und dann die dazugehörige Funktion.

# Ausduck
[> f a := p i e c e w i s e ( x
[> M1: = { 2 , 2 , 3 , 4 , 4 , 4 , 5 } ;

                                              M 1 := {2, 3, 4, 5}

 [> M2:={x [ 1 ] , x [ 2 ] , x [ 3 ] } ;

                                             M 2 := {x1 , x2 , x3 }

 [> M3:={ s e q ( i , i = 4 . . 9 ) } ;

                                            M 3 := {4, 5, 6, 7, 8, 9}

6.2.2. Elementare Mengenoperationen
Schnitt und Vereinigung zweier Mengen können mit dem Befehl intersect bzw. union
durchgeführt werden.

 [> M1 i n t e r s e c t M3;

                                                     {4, 5}

 [> M1 union M3;

                                             {2, 3, 4, 5, 6, 7, 8, 9}

Um zu prüfen ob bestimmte Elemente in einer Menge enthalten sind nutzt man die is()-
Prozedur, für Teilmengen den Befehl subset.

 [> i s ( 4 i n M3 ) ;

                                                      true

 [> { { 3 , 4 } } s u b s e t M1;

                                                     f alse

                                                      10
Die Anzahl der Elemente einer Menge erhält man mit der Prozedur nops().

 [> nops (M3 ) ;

                                                           6

6.3. Punkte, Geraden und Ebenen
Geometrische Objekte wie zum Beispiel Polygone, Ebenen oder Würfel können in Maple
auch erstellt werden Dabei muss man für zweidimensionale Geometrie das Paket geome-
try und für dreidimensionale Geometrie das Paket geom3d laden. Diese Pakete beinhalten
viele Prozeduren von denen wir nur einige wenige in diesem Abschnitt besprechen.

6.3.1. 2D Punkte und Geraden erstellen
Zunächst lädt man geometry mit dem Befehl with(geometry).

 [> with ( geometry ) :

Dann kann man die Prozedur point() nutzen um Punkte zu definieren. Dabei steht im
ersten Argument der Name der neuen Variable und im zweiten die gewünschten Koordi-
naten

 [> p o i n t ( P1 , [ 0 , 0 ] ) ; p o i n t ( P2 , [ 1 , 1 ] ) ;

Geraden werden dann entweder mithilfe zweier Punkte oder der Geradengleichung mit
line() erstellt. Hierbei muss man am Ende noch definieren, welchen Namen die Koordina-
tenachsen haben sollen. Diese Namen werden dann bei der erstellung der Geradengleichung
verwendet.

 [> l i n e ( g1 , [ P1 , P2 ] , [ x , y ] ) ; l i n e ( g2 , x−y , [ x , y ] ) ;

6.3.2. 3D Punkte und Geraden erstellen
Hierzu lädt man mit with(geom3d) das benötigte Paket.

 [> with ( geom3D ) :

Das Erstellen von Punkten erfolgt dann wie im zweidimensionalen Fall. Bei Geraden muss
hier aber die Parameterdarstellung angegeben werden!

 [> p o i n t ( P1 , [ 0 , 0 , 0 ] ) ; p o i n t ( P2 , [ 1 , 1 , 1 ] ) ; p o i n t ( P3 , [ 1 , − 1 , 3 ] ) ;

 [> l i n e ( g1 , [ P1 , P2 ] ) ; l i n e ( g2 , [ t , t , t ] , t ) ;

                                                         11
Mithilfe dreier Punkte oder der Ebenengleichung kann man den Befehl plane() nutzen,
um Ebenen zu erstellen.

 [> p l a n e ( e1 , [ P1 , P2 , P3 ] , [ x , y , z ] ) ; p l a n e ( e2 , 4 ∗ x−2∗y−2∗z , [ x , y , z ] ) ;

6.3.3. Einige Prozeduren im geometry- und geom3d-Paket
Im Folgenden wird angenommen, dass diese Variablen vorhanden sind:

 [>   with ( geom3d ) :
 [>   p o i n t ( P1 , [ 3 , 5 , − 6 ] ) :
 [>   l i n e ( g1 , [ t , 3 ∗ t +4 ,2∗ t ] , t ) :
 [>   p l a n e ( e1 , 4∗x−2∗y−2∗z , [ x , y , z ] ) :

Den Inhalt eines geomentrischen Objekts kann man sich mit detail() anzeigen lassen.

 [> d e t a i l ( e1 ) ;

                                    name of the object              e1
                                    form of the object            plane3d
                              equation of the plane 4x − 2y − 2z = 0

Der Befehl distance() gibt den Abstand zweier Objekte aus.

 [> d i s t a n c e ( P1 , e1 ) ;

                                                   7√
                                                      6
                                                   6

Die Koordinaten eines Punktes kann man mit coordinates(), die Gleichung bzw. Para-
meterform einer Geraden oder Ebene kann mit Equation() ausgelesen werden.

 [> c o o r d i n a t e s ( P1 ) ;
 [> Equation ( g1 , t ) ;
 [> Equation ( e2 , [ x , y , z ] ) ;

                                                     [3, 5, −6]
                                                [t, 3t + 4, 2t]
                                           4x − 2y − 2z = 0

                                                     12
Den Winkel zwischen zwei Geraden oder einer Geraden und einer Ebene kann man mit
FindAngle() bestimmen.

 [> FindAngle ( g1 , e1 ) ;

                                                          1√
                                            − arcsin(        21)
                                                          14

Projektionen von Punkten auf Geraden oder Geraden auf Ebenen erzeugt der Befehl
projection(). Hier ist P 2 die Projektion von P 1 auf die Ebene e1.

 [> p r o j e c t i o n ( P2 , P1 , e1 ) : c o o r d i n a t e s ( P2 ) ;

                                                   2 37 29
                                                             
                                                    , ,−
                                                   3 6   6

6.4. Vektoren und Matrizen
Vektoren können mit dem Befehl Vector(), Matrizen mit dem Befehl Matrix() erzeugt
werden. Eine Alternative dazu ist die Abkürzung mit den kleiner/größer Zeichen „“.
Verschiedene Prozeduren wie das Berechnen von Determinanten oder Eigenwerten findet
man im Paket LinearAlgebra.

6.4.1. Vektoren und Matrizen erstellen
Der Inhalt von Vektoren und Matrizen kann eine beliebige, der schon besprochenen Va-
riablentypen, sein. Dabei wird der Inhalt von Vektoren in eckigen Klammern übergeben.

 [> v1 := Vector ( [ 1 , 2 , 3 ] ) ;           #1. M ö g l i c h k e i t
 [> v1 := ;                          #2. M ö g l i c h k e i t

                                                      
                                                      1
                                                     2
                                                      
                                                      3

                                                       13
Schreibt man nur eine Zahl in Vector() so erhält man einen Nullvektor.

 [> v2 := Vector ( 3 ) ;

                                                   
                                                   0
                                                  0
                                                   
                                                   0

Mit der zusätzlichen Option shape kann man dem Vektor eine bestimmte Form geben.
Hier wird damit ein konstanter Vektor erstellt.

 [> v3 := Vector ( 3 , shape=c o n s t a n t [ 2 ] ) ;

                                                   
                                                   2
                                                  2
                                                   
                                                   2

Bei der Matrix werden die Zeilen in eckigen Klammern angegeben und mit Kommas ge-
trennt. Achtung: Bei der alternativen Schreibweise gibt man die Spalten an, und trennt
diese durch ein „|“ !

 [> A1:= Matrix ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) ;        #1. M ö g l i c h k e i t
 [> A1:=;                                 #2. M ö g l i c h k e i t

                                              "         #
                                                  1 2
                                                  3 4

Schreibt man nur eine Zahl in Matrix() so erhält man eine Nullmatrix.

 [> A2:= Matrix ( 2 ) ;

                                              "         #
                                                  0 0
                                                  0 0

                                                   14
Mit der Option shape=identity kann man eine Einheitsmatrix erstellen.

 [> A3:= Matrix ( 3 , shape=i d e n t i t y ) ;

                                                         
                                                  1 0 0
                                                 0 1 0
                                                       
                                                  0 0 1

Zuletzt kann man Matrizen aus anderen Matrizen und Vektoren zusammensetzen.

 [> A4:= Matrix ( [ A3 , v3 ] ) ;

                                                             
                                              1 0 0 2
                                             0 1 0 2
                                                    
                                              0 0 1 2

6.4.2. Auf den Inhalt von Vektoren und Matrizen zugreifen
Gibt man in runden Klammern hinter dem Namen eines Vektors oder einer Matrix den
Zeilen- oder Spaltenindex an, so wird der Inhalt der Zelle ausgegeben. Der Inhalt kann im
gleichen Zug auch ausgewertet werden. Als Beispiel wird hier eine 2 × 2-Matrix erstellt,
die eine Mengen und eine Funktionen enthält.

 [> A:= Matrix ( [ [ 5 , { 4 , 5 , 6 } ] , [ x−>s i n ( x ) , 4 ] ] ) ;

                                      "                           #
                                              5      {4, 5, 6}
                                          x → sin(x)     4

                                                                          π
Das zweite Element der Menge und der Wert von sin(x) an der Stelle        2   kann dann mit
folgenden Anweisungen ausgewertet werden.

 [> A ( 1 , 2 ) [ 2 ] ;
 [> A( 2 , 1 ) ( Pi / 2 ) ;

                                                     5
                                                     1

                                                     15
Das Zuweisen neuer Werte in bestimmte Matrix-Zellen erfolgt ebenfalls mit dem Index in
runden Klammern. Dabei kann die Matrix auch um Zeilen oder Spalten erweitert werden!

 [> A( 2 , 2 ) : = 1 7 ;
 [> A( 1 , 3 ) : = 7 ;

                                           "                           #
                                                5      {4, 5, 6}
                                            x → sin(x)    17
                                       "                                #
                                            5      {4, 5, 6} 7
                                        x → sin(x)     4     0

6.4.3. Rechnen mit Vektoren und Matrizen
Hier wird wieder angenommen, dass folgende Variablen definiert sind:

 [>   with ( L i n e a r A l g e b r a ) :
 [>   v:= Vector ( [ 2 , − 1 , 3 ] ) :
 [>   A:= Matrix ( [ [ 2 , − 1 , 1 ] , [ − 3 , 4 , 1 ] , [ 3 , 4 , 5 ] ] ) :
 [>   B:= Matrix ( [ A, v ] ) :

Möchte man Zahlen mit Matrizen multiplizieren, so muss man das Asteriskzeichen „*“
nutzen. Bei der Matrix- bzw. Vektormultiplikation muss man einen Punkt „.“ setzen.
Sobald bei einer Vektormultiplikation wie v.v die Dimensionen nicht übereinstimmen,
wird automatisch das Skalarprodukt berechnet.

 [> v . v ; A. v ; A.A;

                                                             14
                                                               
                                                            8
                                                           −7
                                                            
                                                            17
                                                                
                                                 10 −2 6
                                               −15 23 6 
                                                         
                                                 9  33 32

                                                        16
Transponieren erfolgt mit dem Befehl Transpose() oder der Abkürzung „^+“ (Dach und
Pluszeichen).

 [> Transpose ( v ) ; v^+; B^+;

                                         h             i
                                             2 −1 3
                                         h             i
                                             2 −1 3
                                                      
                                       2 −3 3
                                     −1 4 4
                                             
                                      1  1 5
                                             

                                       2 −1 3

                                                                                   1
Um die Länge eines Vektors mit der p-Norm zu berechnen |v| := (v12 + . . . + vn2 ) p , benö-
tigt man den Befehl Norm(v,p). Die Zeilensummennorm einer Matrix erhält man mit
Norm(A).

 [> Norm( v , 2 ) ; Norm(A ) ;

                                              √
                                                  14
                                                  12

Die Prozeduren Determinant() und Rank() geben die Determinante und den Rang
einer Matrix zurück.

 [> Determinant (A ) ; Rank (B ) ;

                                              −10
                                                  3

Eigenvalues() und Eigenvectors() werden genutzt um die Eigenwerte und Eigenvek-
toren zu bestimmen. Die Eigenwerte werden dabei in einem Vektor ausgegeben. Bei den
Eigenvektoren werden die Eigenwerte als Vektor und dazu die Eigenvektoren als Spalten
einer Matrix ausgegeben.

                                                  17
[> E i g e n v a l u e s (A ) ; E i g e n v e c t o r s (A ) ;

                                                                                   
                                                                                 5√
                                                                             3 − √11
                                                                                    
                                                                              3 + 11
                                                                                √ 
                                                                             3 + √11
                                                                            3 − 11 ,
                                                                                   
                                                                                5
                                                  √                         √      
                             4    10            −2+  11 √        10      −2−   11 √
                             9    7    ·        √
                                           (−1+ 11)(1+    11)
                                                                         √
                                                                 7 (−1− 11)(1− 11) 
                                                   √                         √
                                             1 −13+3
                          1
                         − 3              − 7 −1+ 11
                                                   √  11
                                                                    − 17 −13−3
                                                                             √ 11
                                                                          −1− 11
                                                                                    
                                                                                    
                             1                   1                           1

Die Anweisung MatrixInverse() berechnet die Inverse einer gegebenen Matrix.

 [> M a t r i x I n v e r s e (A ) ;

                                                                       
                                                 −8         9
                                                          − 10    1
                                                 59        7
                                                                  2
                                                                  1
                                                − 5      − 10
                                                                        
                                                                  2     
                                                     12    11
                                                     5     10    − 12

7. Prozeduren für verschiedene Mathematische Themengebiete
Für viele mathematische Problemstellungen gibt es in Maple nützliche Pakete. Diese ent-
halten Prozeduren, mit denen man die Lösung der Probleme bestimmen kann. Im folgen-
den Abschnitt werden einige Aufgaben mit Maple gelöst.

7.1. Wichtige Konstanten
Die Zahl π erhält man in Maple, wenn man Pi eingibt. PI und pi stehen für den griechi-
schen Klein- bzw. Großbuchstaben p. Die komplexe Einheit i ist in Maple in der Konstan-
ten I und Unendlich ∞ in der Konstanten infinity gespeichert.

7.2. Gleitkommadarstellung von Lösungen
Da Maple versucht exakt zu rechnen, erhält man oftmals Lösungen der Form
                                             √
                             10        −2 + 11
                                ·       √         √ .
                              7 (−1 + 11)(1 + 11)
Welche Zahl sich hinter dem Ausdruck verbirgt, kann man in diesen Fällen nur schwer
schätzen. Der Befehl evalf() gibt eine Näherung des Audrucks in Dezimaldarstellung
zurück.

                                                            18
[> e v a l f ( s q r t ( 2 ) ) ; e v a l f ( Pi ) ;

                                                1.414213562
                                                3.141592654

In der Konstanten Digits ist die Anzahl der angezeigten Stellen gespeichert. Um die
Anzahl der Ziffern global zu ändern, muss man dieser Variablen nur den gewünschten
Wert zuordnen. Soll bei einer einzelnen Auswertung eine andere Anzahl an signifikanten
Ziffern ausgegeben werden, so kann man dem evalf()-Befehl noch einen Index in eckigen
Klammern übergeben.

 [> D i g i t s : = 1 5 : e v a l f ( Pi ) ; e v a l f [ 3 ] ( Pi ) ;

                                            3.14159265358979
                                                               3.14

7.3. Lineare Algebra
In den Folgenden Abschnitten wird das Paket LinearAlgebra verwendet. Zusätzlich wer-
den diese Variablen definiert:

 [>   with ( L i n e a r A l g e b r a ) :
 [>   eq1 :=x+2∗y−z −2:
 [>   eq2 :=3∗ x+y+2∗z −3:
 [>   eq3 :=2∗x−2∗y+z −1:
 [>   A:= Matrix ( [ [ 1 , 2 , 1 ] , [ 3 , 1 , 2 ] , [ 2 , − 2 , 1 ] ] ) :
 [>   B:= Matrix ( [ [ 1 , 0 , 3 ] , [ 3 , − 2 , − 1 ] , [ 1 , − 1 , 1 ] ] ) :
 [>   b:= Vector ( [ 2 , 3 , 1 ] ) :

7.3.1. Lösen linearer Gleichungssysteme
Lineare Gleichungssysteme in Form der Matrixgleichung Ax = b können mit der Proze-
dur LinearSolve() gelöst werden. Hat man die einzelnen Gleichungen gegeben, so findet
solve() die Lösung. Alternativ erhält man durch die Inverse mit x = A−1 b das gesuchte
Ergebnis.

                                                        19
[> L i n e a r S o l v e (A, b ) ;                       # 1. Möglichkeit
 [> s o l v e ( eq1 =0, eq2 =0, eq3 =0 ,[ x , y , z ] ) ; # 2 . M ö g l i c h k e i t
 [> IA:= M a t r i x I n v e r s e (A ) : IA . b ;        # 3. Möglichkeit

                                                                      
                                                                −1
                                                                0 
                                                                
                                                                 3
                                        [[x = −1, y = 0, z = 3]]
                                                                      
                                                                −1
                                                                0 
                                                                
                                                                 3

7.3.2. Berechnen der Diagonalform/Jordanschen Normalenform einer Matrix
Die Jordansche Normalenform oder Diagonalform einer Matrix kann mit der Prozedur
JordanForm() berechnet werden. Alternativ kann man mit Eigenvectors() die Matrix
S aus Eigenvektoren nehmen und die Diagonalform D = S −1 BS berechnen.

 [> JordanForm (B ) ;                                             # 1. Möglichkeit
 [> H i l f := E i g e n v e c t o r s (B ) : S:= H i l f [ 2 ] : # 2 . M ö g l i c h k e i t
 [> M a t r i x I n v e r s e ( S ) . B . S ;

                                                              
                                               −3 0 0
                                               0 1 0
                                                     
                                                0 0 2
                                                              
                                                 1 0 0
                                                0 −3 0
                                                      
                                                 0 0 2

7.3.3. Gram-Schmidt Orthogonalisierung
Die Prozedur GramSchmidt() bildet aus einer Liste von Vektoren eine Orthogonalbasis.

 [> v1 := Vector ( [ 1 , 1 , 0 , 1 ] ) : v2 := Vector ( [ 0 , 1 , 0 , 1 ] ) :
 [> v3 := Vector ( [ 0 , 0 , 0 , 1 ] ) :
 [> GramSchmidt ( [ v1 , v2 , v3 ] ) ;

                                                  2              
                                         1           −           0
                                       1          13      − 1 
                                                     3        2 
                                         ,            ,
                                        
                                       0          0        0 
                                                                  
                                                      1            1
                                         1            3            2

                                                          20
7.4. Analysis
Für die Berechnungen in diesem Kapitel muss kein zusätzliches Paket geladen werden.

7.4.1. Grenzwerte
Der Befehl limit() kann genutzt werden, um Grenzwerte von gegebenen Ausdrücken zu
berechnen.
                             1 n
Um den Grenzwert lim (1 +      ) zu bestimmen, wird zunächst die Folge als Audruck
                   n→∞      3n
gespeichert und dann mit limit() ausgewertet. Für den Grenzwert von Funktionenfolgen
gilt das Gleiche.

 [> a [ n ] : = ( 1 + 1 / ( 3 ∗ n ) ) ^ n :
 [> l i m i t ( a [ n ] , n=i n f i n i t y ) ;

                                                      1
                                                     e3

Der Grenzwert einiger Reihen kann auch berechnet werden. Dazu verwendet man den Sum-
                                                                    ∞
                                                                   X    1
menbefehl sum() und wählt als obere Grenze infinity. Für die Reihe        erhält man:
                                                                   n=1
                                                                       n2

 [> sum ( 1 / n ^2 , n = 1 . . i n f i n i t y ) ;

                                                     1 2
                                                       π
                                                     6

7.4.2. Partialbruchzerlegung
Um rationale Funktionen zu integrieren benötigt man oftmals die Partialbruchzerlegung.
Diese kann mit dem Befehl convert(Abbildung, parfrac, Variable) gefunden werden. Als
erstes Argument wird die Abbildung als Ausdruck übergeben und im dritten Argument
gibt man die Variable an, nach der man zerlegen möchte.

 [> f :=2∗ x / ( x^3−5∗x +4):
 [> c o n v e r t ( f , p a r f r a c , x ) ;

                                                 1     x+4
                                            −      + 2
                                                x−1 x +x−4

7.4.3. Ableitungen und Integrale
Wie in Tabelle 2 zu sehen, gibt es für Ausdrücke und Funktionen verschiedene Befehle um
Ableitungen zu berechnen. Ausdrücke werden mit dem Befehl diff(), Funktionen mit D()

                                                      21
abgeleitet. Möchte man eine Funktion mehrerer Variablen partiell ableiten, oder höhere
Ableitungen berechnen, so muss man diese unterschiedlich angeben.
                                                    √
Als Beispielfunktion nehmen wir f : R → R, (x, y) 7→ xy.
In diff() gibt man die Variablen nach der Funktion an. Im Beispiel wird x∂f 2 y 3 berechnet.

Durch x$2 wird in Maple die Folge x, x erstellt. Damit kann man sich Schreibarbeit sparen.

 [> f := s q r t ( x∗y ) :
 [> d i f f ( f , [ x , x , y , y , y ] ) ;      # 1. Möglichkeit
 [> d i f f ( f , x$2 , y$3 ) ;                  # 2. Möglichkeit

                                     105 y 2 x3    45 yx2      9 x
                                               9 −           +
                                     32 (xy) 2     8 (xy) 27   4 (xy) 52

Bei Funktionen sind die Variablen nach ihrer Reihenfolge durchnummeriert. In unserem
Beispiel ist x die 1. und y die 2. Varible. Dementsprechend gibt man vor der Klammer bei
D() in eckigen Klammern die partielle Ableitung an.

 [> f :=( x , y)−> s q r t ( x∗y ) :
 [> D[ 1 , 1 , 2 , 2 , 2 ] ( f ) ;             # 1. Möglichkeit
 [> D[ 1 $2 , 2 $3 ] ( f ) ;                   # 2. Möglichkeit

                                           105 y 2 x3    45 yx2      9 x
                               (x, y) →              9 −           +
                                           32 (xy) 2     8 (xy) 72   4 (xy) 52

Unbestimmte und bestimmte Integrale können mit der Prozedur int() berechnet wer-
den. Die Abbildung muss dabei als Ausdruck übergeben werden. Bei Mehrfachintegralen
werden die Variablen wieder in eckigen Klammern angegeben.

 [> f := s q r t ( x∗y ) :
 [> i n t ( f , [ x , x , y ] ) ;

                                                    8 2√
                                                       yx xy
                                                    45

Für bestimmte Mehrfachintegrale muss man für jedes Integral die oberen- und unteren
Grenzen angeben.

 [> f := s q r t ( x∗y ) :
 [> i n t ( f , [ x = 1 . . 2 , x = 2 . . 3 , y = 1 . . 2 ] ) ;

                                                          16 √
                                                    4−         2
                                                          9

                                                           22
7.5. Gewöhnliche Differentialgleichungen
Eine stetige Abbildung ist vollständig durch das Änderungsverhalten auf ihrem Definiti-
onsbereich und einem bekannten Funktionswert definiert. Diese Tatsache für gewöhnliche
Differentialgeichungen erster Ordnung wird dann auf Differentialgleichungen höherer Ord-
nung erweitert.
Um diese Gleichungen in Maple zu lösen, muss man zunächst die Differentialgleichung als
Ausdruck speichern und kann dann die Lösung mithilfe der Prozedur dsolve() finden.

 [> DGL:= d i f f ( x ( t ) , t )+3∗x ( t ) :
 [> d s o l v e ( [DGL=0,x ( 0 ) = 1 ] ) ;

                                               x(t) = e−3t

7.6. Integraltransformation
Integraltransformationen können dazu genutzt werden, schwierige Probleme zu vereinfa-
chen. Zum Beispiel wird ein lineares Differentialgleichungssystem im Originalraum durch
Transformation zu einem linearen Gleichungssystem im Bildraum. Die Lösung des Linea-
ren Systems kann dann mit bekannten Methoden gefunden werden. Anschließend wird die
Lösung in den Originalraum zurücktransformiert. Die rücktransformierte Lösung, ist dann
Lösung des ursprünglichen Differentialgleichungssystems.
Meist ist die Rücktransformation nur numerisch möglich. Im 3. Semester werdet ihr die
Fourier- und Laplacetransformation kennen lernen. Das Paket inttrans beinhaltet die
Prozeduren dafür.
Die Transformationen und Rücktransformationen werden mit fourier(), invfourier(),
laplace() und invlaplace() durchgeführt werden.
Fouriertransformation:

 [>   with ( i n t t r a n s ) :
 [>   f := exp ( 2 ∗ x)+3∗x :
 [>   F:= f o u r i e r ( f , x , s ) ;
 [>   i n v f o u r i e r (F , s , x ) ;

                                   6IπDirac(1, s) + f ourier(e2x , x, s)
                                                               e2x + 3x

                                                     23
Laplacetransformation:

 [>   with ( i n t t r a n s ) :
 [>   f := exp ( 2 ∗ x)+3∗x :
 [>   F:= l a p l a c e ( f , x , s ) ;
 [>   i n v l a p l a c e (F , s , x ) ;

                                            1      3
                                                + 2
                                           s−2 s
                                            e2x + 3x

8. Graphische Darstellung und Animationen
Erstellt man in Maple mit den Befehlen plot() und plots[animate]() eine Zeichnung
oder Animation, so wechselt die Werkzeugleiste, nachdem man das jeweilige Objekt mit der
Maus markiert hat, auf den Reiter Plot oder Animation. Die Werkzeugleiste bietet dann
verschiedene neue Optionen an, womit man die Ansicht der Zeichnung oder Animation
ändern kann.

8.1. Zeichnungen
Für zwei- oder dreidimensionale Zeichungen in Maple sind die Prozeduren plot() bzw.
plot3d() zuständig. Übergibt man den Befehlen alleine die Funktion als Ausdruck, so
wird die Zeichnung mit voreingestellten Optionen dargestellt.

8.1.1. 2D- Plot
Die Angabe der Eingabewerte geschieht wie folgt:

[> plot([1.Funktion, 2.Funktion, . . . ], 1.Option, 2.Option, . . . );

Die Funktion wird als Ausdruck übergeben, dabei ist es möglich diese in Gleichungs- oder
Parameterform anzugeben.

# Funktion durch G l e i c h u n g s f o r m angeben
[> p l o t ( x ^ 2 ) ;
# Funktion durch Parameterform angeben
[> p l o t ( [ t , t ^2 , t = − 1 0 . . 1 0 ] ) ;

                                               24
Abbildung 2: Zeichnung mithilfe Parameter- bzw. Gleichungsform

Möchte man die Koodrinatenachsen auf Intervalle [a, b] beschränken, so kann man dies
mit der Option Variable=a..b erreichen. Zeichnet man mehrere Funktionen, so kann man
diese einfärben. Die color-Option sieht wie folgt aus: color=[red,green,blue]. Weitere
Optionen findet man in der Maple-Hilfe unter plot/options.

 [> r 1 :=16∗ s i n ( t ) ^ 3 ;
 [> r 2 :=13∗ c o s ( t )−5∗ c o s ( 2 ∗ t )−2∗ c o s ( 3 ∗ t )− c o s ( 4 ∗ t ) ;
 [> p l o t ( [ [ r1 , r2 , t = − 5 . . 5 ] , t ] , t = −20..20 , c o l o r =[ red , g r e e n ] ) ;

                         Abbildung 3: Zeichnung mit mehreren Optionen

8.1.2. 3D- Plot
Bei plot3d() ist es auch wieder möglich die Funktionen in Parameter- oder Gleichungsform
anzugeben. Dabei muss man beachten, dass die gemischte Angabe nicht mehr möglich
ist. Das heißt, man muss sich auf eine Form beschränken. Auch müssen der Prozedur
mindestens drei Eingabeparameter übergeben. Der Wertebereich für die Urbildvariablen
wird hier nicht automatisch gewählt. Diese werden in jeder Zeichnung durch Variable=a..b

                                                      25
angeben. In früheren Maple-Versionen wird das Koordinatensystem nicht automatisch
angezeigt. Um dieses zu aktivieren, muss man die Option axes=Boxed hinzufügen.

# Funktion durch G l e i c h u n g s f o r m angeben
[> p l o t 3 d ( x^2+y ^2 , x = −4..4 , y = −4..4 , a x e s=Boxed ) ;
# Funktion durch Parameterform angeben
[> p l o t 3 d ( [ x , y , x^2+y ^ 2 ] , x = −4..4 , y = −4..4 , a x e s=Boxed ) ;

            Abbildung 4: Zeichnung mithilfe Parameter- bzw. Gleichungsform

Als zusätzliche Option kommt hier nur style=Option hinzu. Damit kann man Kontur-
zeichnungen erstellen oder Oberflächen in unterschiedlichen Stilen ausgeben.

# Funktion durch G l e i c h u n g s f o r m angeben
[> p l o t 3 d ( x∗ exp(−x^2−y ^ 2 ) , x = −2..2 , y = −2..2 , s t y l e=contour ,
c o n t o u r s =30 , a x e s=Boxed ) ;

                 Abbildung 5: Konturzeichnung mithilfe der style-Option

                                                 26
8.2. Animationen
Eine Animation wird aus vielen einzelnen Zeichnungen erstellt. Dies wird möglich, wenn
man zum Beispiel einen Parameter an seine Funktion multipliziert und diese dann für
verschiedene Parameterwerte zeichnet. plots[animate]() benötigt folgende Eingabewerte:

 [> p l o t s [ animate ] ( p l o t o d e r 3 d p l o t , [ Angaben zum P l o t ] ,
 Parameterwerte , Optionen ) ;

Nachdem man den Bereich für den Parameter angegeben hat, kann man die Anzahl der
erstellten Bilder mit der Option frames=Anzahl festlegen.
Im Folgenden werden noch zwei Beispiele angegeben:

# 1 . B e i s p i e l : S i n u s z u r Amplitude A
[> p l o t s [ animate ] ( p l o t , [ A∗ s i n ( x ) , x = − 4 . . 4 ] ,A= −3..3 , f r a m e s =50);

           Abbildung 6: Die Sinus-Funktion mit unterschiedlichen Amplituden

# 2 . B e i s p i e l : P a r a b o l o i d m u l t i p l i z i e r t mit dem Parameter A
[> p l o t s [ animate ] ( p l o t 3 d , [ A∗ ( x^2+y ^ 2 ) , x = −5..5 , y = − 5 . . 5 ] ,
A= −3..3 , a x e s=Boxed ) ;

                                                   27
150

 100

  50

   0

 − 50

− 100

− 150
       −4                                           −4
            −2                                 −2

                 y 0                   0
                                           x
                       2           2
                           4   4

            Abbildung 7: Zeichnung eines Paraboloiden zu unterschiedlichem Parameter A

9. Programmieren in Maple
Wie in anderen Programmiersprachen, sind die gewohnten Schleifen und Verzweigungen
auch in Maple vorhanden. Deren Syntax betrachten wir in den letzten beiden Unterab-
schnitten. Im Gegensatz zu vielen Programmiersprachen, müssen keine Variablentypen
angegeben werden. Auch muss kein Speicherplatz für Variablen, wie zum Beispiel in ei-
ner Schleife größer werdende Vektoren, vorbelegt werden. Um die Geschwindigkeit von
Programmen zu beschleunigen ist dies aber empfehenswert.

9.1. Einlesen von Daten
Oftmals erhält man von Firmen Messergebnisse aus Versuchsreihen, in Form von Textda-
teien. Diese enthalten dann Tabellen mit den verschiedenen Testeinstellungen, Parametern
und numerischen Ergebnissen. Um die Zahlenwerte aus Textdateien in Maple einzulesen
verwendet man die Prozedur readdata(Dateipfad, Format, Anzahl der Spalten).

        • Dateipfad - Liegt die einzulesende Datei im gleichen Ordner wie die Maple-Datei, so
          muss man nur den Namen der Datei angeben. Auf einigen Rechnern funktioniert
          das einlesen vom aus Desktop nicht!

        • Format - Hier wird angegeben, als welcher Datentyp die Daten gespeichert werden
          sollen. Hierbei gibt es die Typen integer für Ganzzahlen, float für Gleitkommazah-
          len oder string für Zeichenketten. Dabei kann in eckigen Klammern für jede Spalte
          ein eigener Datentyp angegeben werden.

        • Anzahl der Spalten - Die Textdatei wird von links nach rechts und von oben nach un-
          ten nach Zahlenwerten durchsucht. Je nachdem wieviele Spalten man angibt, werden
          die Daten dann in eine Liste eingetragen.

                                                         28
Als Beispiel wurde eine Textdatei namens Daten.txt mit folgendem Inhalt erstellt:

 Eingab ew er te              Parameter                Ergebnisse
 1                            1                        50
 1                            2                        55
 2                            1                        55
 2                            2                        70

Die Daten können dann mit readdata() ausgelesen und in eine Variable A gespeichert
werden.

 [> A:= r e a d d a t a ( " Daten . t x t " , 3 ) ;

                            [[1., 1., 50.], [1., 2., 55.], [2., 1., 55.], [2., 2., 70.]]

Möchte man eine eigene Liste als Text-Datei Speichern, so gibt es dafür den Befehl wri-
tedata(Dateipfad, Liste, Format).

 [> A : = [ [ 1 , 2 ] , [ 3 , 6 ] , [ 8 , 9 ] ] :
 [> w r i t e d a t a ( " E r g e b n i s . t x t " ,A ) ;

9.2. Eigene Prozeduren erstellen
Der Aufbau von Prozeduren ist ähnlich zu den Funktionen in C. Die Anweisungen können
in einer oder mehreren Zeilen geschehen. Dabei muss man Umschalt + Eingabe nutzen
um in die nächste Zeile zu gelangen. Einrückungen von Programmblöcken um die Prozedur
übersichtlicher zu gestalten, funktioniert in Maple nur mit dem Leerzeichen.

[> Prozedurname:=proc(Eingabevariable1, Eingabevariable2, . . . )
          ..
           .
Anweisungen die ausgeführt werden sollen.
          ..
           .
return Ausgabevariable1, Ausgabevariable2, . . . ;
end proc;

Ein kleines Beispiel ist folgende Prozedur, die den Namen AddiereEins hat. Gibt es keine
Fehler im Programm, so wird die Prozedur von Maple einfach wieder ausgegeben.

 [> A d d i e r e E i n s := p r o c ( x )
    r e t u r n x+1;
    end p r o c ;

                                     proc(x) return x + 1 endproc

                                                             29
Schreibt man in einem Maple-Dokument eine Prozedur, so kann man diese im gleichen Do-
kument verwenden. Dazu setzt man den gewünschten Wert am Ende des Prozedurnamens
in runde Klammern.

 [> A d d i e r e E i n s ( 2 ) ;

                                                   3

Innerhalb der Prozeduren sind alle Variablen des Maple-Dokuments unbekannt. Um mit
neuen Variablen in einer Prozedur zu arbeiten, muss man lokale Variablen mit dem Befehl
local Variable1, Variable2, . . . am Anfang der Prozedur definieren.
Im nächsten Beispiel wird die Primfaktorzerlegung einer ganzen Zahl x durchgeführt. Das
Ergebnis wird dann mit dem Befehl print() ausgegeben. print() gibt nur die jeweili-
gen Ausdrücke mit Komma getrennt aus. Für eine besser formatierte Ausgabe kann man
printf() nutzen.

 [> P r i m f a k t o r := p r o c ( x )
    l o c a l PFaktor , Anzahl ;
    PFaktor := i f a c t o r ( x ) ;
    Anzahl := nops ( P f a k t o r ) ;
    p r i n t ( " Anzahl d e r P r i m f a k t o r e n : " , Anzahl ) ;
    print ( " Primfaktoren : " , Pfaktor ) ;
    end p r o c ;

 [> P r i n f a k t o r ( 4 7 4 ) ;

                                      ”Anzahl der Primfaktoren:”, 3
                                        ”Primfaktoren:”, (2)(3)(79)

Um Prozeduren abzuspeichern damit sie in anderen Dokumenten nutzbar sind, werden die
Befehle save(Prozedur1, Prozedur2, . . . , Dateipfad) und read(Dateipfad) verwendet. Zur
schnelleren Verarbeitung innerhalb von Maple sollte man diese Dateien unter der Endung
„.m“ speichern. Möchte man die obige Prozedur Primfaktor als Datei speichern und in
einem anderen Dokument wieder benutzen, so sehen die Befehle so aus:

 [> s a v e ( P r i m f a k t o r , " Prim .m" )

 [> r e a d ( " Prim .m" ) ;

9.3. Schleifen
Schleifen werden genutzt um Anweisungen mehrfach auszuführen. Dabei können sich die
Anweisungen, abhängig von einer Zählvariablen, in jedem Schritt verändern. Die typi-
schen for- und while-Schleifen sind in Maple nicht getrennt. Die while-Bedingung oder
Abbruchbedingung wird in die for-Schleife hineingefügt.
Der allgemeine Aufbau einer Schleife sieht in Maple wie folgt aus:

                                                    30
[> for Zählvariable from Anfangswert by Schrittweite to Endwert while Bedingung
do
           ..
            .
Anweisungen die ausgeführt werden sollen.
          ..
           .
end do;

Nicht alle Anweisungen der ersten Zeile müssen auch genutzt werden. Im nächsten Beispiel
wollen wird die Zählvariable in jedem Schritt ausgegeben.

 [> f o r n from 1 t o 3
    do
    n;
    end do ;

                                            1
                                            2
                                            3

Die mit by angegebene Schrittweite kann auch negativ sein!

 [> f o r n from 3 by −1 t o 1
    do
    n;
    end do ;

                                            3
                                            2
                                            1

Und zuletzt kann man sich die Zählvarible bis zu einer bestimmten Zahl ausgeben lassen.
Dazu nutzen wir die Bedingung while(n f o r n from 2 w h i l e n
9.4. Verzweigungen
Wird im Programm eine Fallunterscheidung benötigt, so kann man die if -Verzweigung
verwenden. In Maple hat sie folgende Form:

[> if 1.Bedingung then 1.Anweisung
elif 2.Bedingung then 2.Anweisung
else 3.Bedingung
end if

Als Beispiel wird in einer Variablen x der Wert −1 gespeichert und überprüft ob der Wert
negativ oder positiv ist. Dann wird je nach Fall das Wort „negativ“, „positiv“ oder „nicht
definiert“ ausgegeben.

 [> x : = 1 ;
 [> i f x0 then p r i n t ( " p o s i t i v " )
    e l se print (" nicht d e f i n i e r t ")
    end i f ;

                                           ”negativ”

9.4.1. Bedingungen
Mehrere Bedingungen innerhalb einer while()- oder if()-Anweisung können mit logischen
Operatoren Verknüpft werden. Dabei steht and für das logische UND ∧, or für das logische
ODER ∨ und not für das logische NICHT ¬.

                                                 32
Literatur
[1] Maplesoft, a division of Waterloo Maple Inc. Maple User Manual, 2015.

                                         33
Sie können auch lesen