MOSES-Projekt, GL, Juli 2003 Eine Kurzanleitung zu Maple Wir geben im Folgenden eine kurze Einführung in die Möglichkeiten, die das Computer Algebra System Maple bietet. Diese Datei (kuzanleitung_maple.mws) ist eine sogenannte Worksheet Datei und kann mit Maple gelesen und editiert werden. Ihr erhaltet so die Gelegenheit diese Datei zu variieren oder zu erweitern, um einen Zugang zu den vielfältigen Möglichkeiten von Maple zu bekommen. Als erstes führen wir eine Neustart von Maple durch. Dies leistet die folgende Zeile. > restart; Jede Befehlszeile muss entweder mit einem Semikolon (oder einem Doppelpunkt) abgeschlossen werden. ENTER veranlasst dann Maple die aktuelle Zelle (siehe Klammern am linken Rand) auszuführen. Symbolische, numerische und grafische Funktionalitäten: Eines der Hauptmerkmale von Maple, im Vergleich zu Paketen wie Matlab o. ä., ist die Möglichkeit symbolisch, d. h. ohne Zahlen einzusetzen, zu rechnen. Zum Beispiel kann Maple den Ausdruck (a+b)^2 ausmultiplizieren, ohne zu wissen welche Werte den Variablen a und b zugewiesen sind. Dazu geben wir diesen Ausdruck ein und sagen was damit geschehen soll. > expand((a+b)^2); a2 + 2 a b + b2 Diese binomische Formel hätten die meißten sicherlich auch im Kopf gehabt. Die wenigsten werden jedoch die folgende Aufgabe so schnell bewältigen, wie Maple dies tut. > expand((a+b+c)^4); 12 a 2 b c + 12 a b c 2 + 12 a b 2 c + 4 a 3 b + 4 a 3 c + 6 a 2 b 2 + 6 a 2 c 2 + 4 a b 3 + 4 a c 3 + 4 b 3 c + 6 b 2 c2 + 4 b c3 + a 4 + b 4 + c4 Natürlich kann Maple auch mit Zahlen, d. h.numerisch, rechnen. Der Befehl evalf dient dazu einen gegebenen Ausdruck beliebig genau durch eine (endliche) Fließkommazahl zu approximieren. So kann man zum Beispiel die Quadratwurzel von 2 auf n Dezimalstellen genau ausrechnen lassen. Sei zum Beispiel n=40: > evalf(sqrt(2),40); 1.414213562373095048801688724209698078570 In der Tat kann man n beliebig groß wählen. Es ist alles nur eine Frage der Rechnerleistung (=Zeit die man gewillt ist auf das Ergebnis zu warten) und des Speicherplatzes (die genaue Dezimalzahl würde ja unendlich viel Speicherplatz benötigen). Ein anderer wichtiger Aspekt sind Maples grafische Funktionalitäten. Als Beispiel lassen wir den Graph der Sinusfunktion zeichnen: > plot(sin(x),x=-Pi..Pi,labels=["x","sin(x)"]); 1 sin(x) –3 –2 0.5 –1 1 x 2 3 –0.5 –1 Definitionen: Symbole: Definitionen werden in Maple mit dem ":=" Zeichen gemacht. Das was links davon steht wird durch das was rechts davon steht definiert. Zum Beispiel: > a:=(x+y)^2; a := (x + y )2 > expand(a); x2 + 2 x y + y2 Sobald wir obige Zelle durch drücken von ENTER abgeschickt haben, stößt Maple auf das Symbol a und sucht in seinem Speicher nach Informationen über dieses Symbol. Wird eine Definition gefunden, so wird diese anstelle des Symbols a eingesetzt. Erst dann wird der aussen stehende Befehl expand ausgeführt. So arbeitet sich Maple bei jedem eingegebenen Ausdruck, der mit einem Semikolon (oder Doppelpunkt) abgeschlossen wurde, von Innen nach Aussen durch. Diesen Prozeß nennt manEvaluation (nach dem englischen Begriff evaluation). Eine ganz besondere Rolle kommt Ausdrücken zu, die durch Hochkommas eingegrenzt sind. Ihre Evaluation resultiert in genau dem Ausdruck, der in den Hochkommas steht. So haben wir zum Beispiel: > expand(’a’); a So kann jede dem Symbol a zugewiesene Definition durch folgende trickreiche Zeile gelöscht werden: > a:=’a’; a := a a ist jetzt per Definition eben nur noch gleich a. Abbildungen: Eine Abbildung wird in Maple mit einem Rechtspfeil "-> "(Minuszeichen gefolgt von einem Größerzeichen) notiert, wie folgt: > f:=x->sin(x); f := sin f ist nun definiert als die Abbildung, die jedem x den Ausdruck sin(x) zuweist. Zum Beispiel haben wir: > f(alpha); sin(α ) > f(Pi/2); 1 > a:=(x+y)^2; f(a); a := (x + y )2 sin((x + y )2 ) Übrigens: SHIFT+RETURN erzeugt einen Zeilenumbruch innerhalb einer Zelle. Gleichungen: Im letzten Abschnitt haben wir die definitorische Gleichheit, geschrieben mit dem ":=" Zeichen kennengelernt. Eine andere Art von Gleichheit ist die Gleichheit im Aussagensinne. Sie wird in Maple mit dem einfachen "=" Zeichen geschrieben. > eqn:=x^2+p*x+q=0; eqn := x 2 + p x + q = 0 Das Symbol eqn steht nun für die quadratische Gleichungx^2+p*x+q=0 . Der Befehl solve kann dazu benutzt werden, diese Gleichung nach x aufzulösen. > solve(eqn,x); p − + 2 p2 − 4 q p ,− − 2 2 p2 − 4 q 2 Maple gibt die Lösungen dieser Gleichung als eine Sequenz, d. h. eine durch Kommas getrennte Aufzählung, von Ausdrücken wieder. Behandelt man die Gleichung als eine Aussage, dann kann Maple versuchen ihre Wahrheit festzustellen. Dies leistet der Befehl versuchen ihre Wahrheit festzustellen. Dies leistet der Befehl evalb. Zum Beispiel: > evalb(sin(Pi)=0); true > p:=evalf(Pi,10); evalb(sin(p)=0); p := 3.141592654 false Wie man erkennt geht Maple hier mit mathematischer Genauigkeit vor. Ableitung, Integration, Taylorentwicklung: Wir betrachten die folgende Funktion f: > x:=’x’; f:=x->x^2; x := x f := x → x 2 Ableitung nach x: > diff(f(x),x); 2x Integration über x von a nach b: > a:=’a’; b:=’b’; int(f(x),x=a..b); a := a b := b b3 a3 − 3 3 Taylorentwicklung der Sinusfunktion um 0 bis zur 10-ten Ordnung: > taylor(sin(x),x=0,10); 1 1 5 1 1 x − x3 + x − x7 + x 9 + O(x 10 ) 6 120 5040 362880 Achtung: Maple prüft im Allgemeinennicht, ob die Taylorreihe tatsächlich gegen die entwickelte Funktion konvergiert! (Im vorliegenden Fall tut sie das natürlich.) Lösen gewöhnlicher Differenzialgleichungen (DGL): Symbolisches Lösen von DGL: Einige einfache Typen von gewöhnlichen DGL kann Maple symbolisch lösen. Dazu verwendet man den Befehldsolve. Zum Beispiel: > t:=’t’; y:=’y’; dsolve(diff(y(t),t,t)=-y(t)); t := t y := y y(t ) = _C1 sin(t ) + _C2 cos(t ) Der Ausdruck diff(y(t),t,t) steht für die zweite Ableitung vony an der Stelle t. Die auftretenden Konstanten C1 und C2 müssen aus den Anfangsdaten bestimmt werden. Auch das kann man automatisch erledigen lassen, indem man die die Anfangsbedingungen mit angibt. Dies geschieht in der folgenden Form: > dsolve({diff(y(t),t,t)=-y(t),y(0)=0,(D(y))(0)=1}); y(t ) = sin(t ) Der Operator D wird hier verwendet um die Ableitung der reinen Funktion y (ohne Argument) darzustellen. Vektor- und Matrizenrechnung: Wir laden zunächst daslinalg Package, welches zahlreiche Befehle zur Vektor- und Matrizenrechnung bereitstellt. > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected Insbesondere dient der Befehl vector dazu einen Spaltenvektor zu definieren. > x:=vector([1,2]); x := [1, 2 ] Obwohl die Darstellung von x vermuten lassen würde, dassx ein Zeilenvektor ist, handelt es sich in der Tat um einen Spaltenvektor (siehe hierzu die Berechnung des Produktes von M und x weiter unten). Ähnliches leistet der Befehl matrix für Matrizen: > M:=matrix(2,2,[a,b,c,d]); a M := c b d Das Produkt der Matrix M mit dem Vektor x (von links) kann man mit Hilfe des Befehls multiply (aus dem linalg Package), abgekürzt durch &*, berechnet werden. > evalm(M &* x); [a + 2 b, c + 2 d ] (Man erkennt hier, dass x in der Tat ein Spaltenvektor ist.) Der inverse Befehl (aus dem linalg Package) erlaubt es die Inverse einer Matrix zu berechnen, sofern die Matrix invertierbar ist: > inverse(M); d ad−bc c − ad−bc b a d − b c a ad−bc − Lineare Gleichungssysteme (LGS): Liegt das LGS in der Form einzelner Gleichungen vor, dann kann der bereits bekannte solve Befehl benutzt werden um dieses zu lösen: > x:=’x’: y:=’y’: solve({x+2*y=1,2*x+y=2},{x,y}); {y = 0, x = 1 } Das Ergebnis wird in der Form einzelner Bestimmungsgleichungen für die Variablen geliefert. Liegt das LGS in Matrixform vor, dann kann der linsolve Befehl (aus dem linalg Package) benutzt werden, wie folgt: > A:=matrix(2,2,[1,2,2,1]); b:=vector([1,2]); 1 A := 2 2 1 b := [1, 2 ] > linsolve(A,b); [1, 0 ] Die Lösung der VektorgleichungA&*x=b wird nun in Vektorform ausgegeben.