Arbeiten mit Maple - Angewandte Mathematik (B.Sc.)
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
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.
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