Einführung in Mathematica Carsten Rezny Institut für Angewandte Mathematik, Universität Bonn Einstieg Mathematica ist eine mathematische Allzweck-Software, die vor allem für ihre Stärken im Umgang mit symbolischen Ausdrücken bekannt ist. Die Universität Bonn hat eine Campuslizenz, die allen Studierenden und Mitarbeitern der Fachbereiche Mathematik und Physik/Astronomie die kostenlose Nutzung von Mathematica ermöglicht. Näheres zur Lizenz und Installation findet sich unter http://mathematica.physik.uni-bonn.de/. Weitere Einführungen und Tutorien finden sich u.a. bei http://mint.sbg.ac.at/rudi/mathsoft2009/ http://physics.univie.ac.at/studium/mathematischemethoden/einstieg/mathematica.php Grundlagen Ein Mathematica-Notebook ist in Zellen gegliedert, Zellen können ihrerseits in Zellen unterteilt sein. Die Markierungen am rechten Rand machen dies deutlich. Jede Zelle hat eine Form, u.a. Input, Output oder Text. Ein neu erstelltes Notebook beginnt mit einer Zelle in InputForm: 11 7 Die Eingabe wird mit Shift- (oder im Ziffernblock) abgeschlossen; daraufhin liefert Mathematica (sofern sinnvoll) eine Output-Zelle mit dem Resultat. Grundsätzlich lässt sich Mathematica vollständig über die Tastatur bedienen. Für mathematische Symbole, griechische Buchstaben u.ä. gibt es Tastenkürzel, z.b. p für Π. Übersichtlicher ist es für den Anfang, mit sogenannten Assistenten zu arbeiten. Diese finden sich im Menüpunkt Palettes ; der Classroom Assistant bietet sich für den Einstieg an. Ein- und Ausgabezellen sind durchnumeriert. Mit %n erreicht man den Inhalt der n-ten Ausgabezelle, mit %% den der vorletzten und mit % den der letzten Ausgabezelle. 2^8 ^3 Es gibt eine Vervollständigung für Funktionsnamen über das Tastenkürzel -K. Mit - -K wird für die links vom Cursor stehende Funktion ein sogenanntes Template erzeugt, gemeint sind Platzhalter für die erwarteten Funktionsargumente. Mathematica bringt eine umfangreiche Online-Hilfe mit, die mit der Taste F1 oder auch kontextabhängig geöffnet werden kann (rechte Maustaste auf Funktionsname -> Get Help). Mit? erhält man eine Kurzhilfe:? Floor Die Syntax von Mathematica orientiert sich weitgehend an der in der Mathematik üblichen Notation sowie an verbreiteten Programmiersprachen wie C oder Java. Z.B.: 2^7 3 Ein Leerzeichen zwischen zwei Ausdrücken steht für Multiplikation. a^2 b c Funktionsaufrufe verwenden eckige Klammern für die Argumente:
2 vl1.nb Sin Π 2 Für Funktionen mit genau einem Argument ist alternativ auch Präfix- oder Postfix-Notation möglich: 2 Sqrt N Π 2 Die imaginäre Einheit wird mit I oder ( ii ) angegeben: I^2 Sqrt 9 Tastaturkürzel oder Paletten (wie der Classroom Assistant) ermöglichen druckreife Eingaben: 1 1 x 2 Bequemer ist oft die Input Form: InputForm Intern wird jeder Ausdruck mit Funktionsaufrufen dargestellt; das ist die Full Form. FullForm Die Default-Darstellung lässt sich als Standard Form explizit anfordern: StandardForm Schließlich kann man die Struktur eines Ausdrucks als Syntaxbaum darstellen: TreeForm Jeder Ausdruck besitzt einen sogenannten Head. Bei Funktionsaufrufen ist das der Name der äußersten Funktion. Beispiele: Head Head a Head 11 Head 3.9 Head 1 Head 2, 4, 6, 8 Ein Semikolon am Ende einer Eingabe unterdrückt die Ausgabe. Außerdem dient das Semikolon als Trennzeichen, um mehrere Anweisungen in einer Input-Zelle unterzubringen. p 0 p 1; p Exaktes und numerisches Rechnen Exakte Zahlen werden von numerisch genäherten Zahlen unterschieden. Mathematica rechnet grundsätzlich mit exakten Zahlen. Wenn möglich, wird dabei vereinfacht, Brüche werden gekürzt. 72 14 Sin Π 5 Was nicht vereinfacht werden kann, bleibt unverändert stehen:
vl1.nb 3 Log 2 Numerische Näherungen müssen explizit verlangt werden und können beliebig viele signifikante Stellen haben. 27.0 7 Π N N Π, 200 Es können nicht beliebig große Zahlen verarbeitet werden. 10^10^10 Die größte auf einem Rechner darstellbare Zahl ist $MaxNumber: $MaxNumber Variablen und Funktionen Variablen werden durch Zuweisung ins Leben gerufen, eine Deklaration entfällt. a 6 zahl 76 767 Variablennamen können beliebige Unicode-Zeichen enthalten, sofern sie keine Bedeutung als Operator haben: 321 großezahl 99 Auf diese Weise definierte Variablen sind global sichtbar. Man kann ein Symbol auch wieder in den undefinierten Zustand versetzen: oder kürzer Clear a a. Eigene Funktionen definiert man wie folgt: g x_ : 2 Sin x 2 g Π 3 Formale Parameter werden durch einen nachgestellten Unterstrich gekennzeichnet. Im Funktionskörper werden die Parameter dann ohne Unterstrich verwendet. Mehr dazu im Abschnitt Funktionale Programmierung. Es kann mehrere Definitionen für das gleiche Symbol geben. Das ist besonders für rekursive Funktionen nützlich, um die Abbruchbedingung zu formulieren. Z.B. Fakultät: f 0 1; f x_ : x f x 1? f f 5 Der Unterschied zwischen = und := besteht im Zeitpunkt der Auswertung: Bei Verwendung von = wird die rechte Seite der Zuweisung sofort ausgewertet. Variablen werden durch ihre aktuellen Werte ersetzt. Bei Zuweisung mit := wird der Ausdruck auf der rechten Seite wie er ist gespeichert. Erst bei Aufruf der Funktion wird der Ausdruck ausgewertet und Variablen durch Werte ersetzt. Daher ist es für die Definition von f[0] gleich, ob sie mit = oder := geschrieben wird. Eine Funktion kann auch mehrere formale Parameter haben:
4 vl1.nb r x_, y_ : Sqrt x^2 y^2 Symbolisches Rechnen Eine der Stärken von Mathematica liegt im symbolischen Rechnen. Wann immer ein Ausdruck undefinierte Bezeichner enthält, wird symbolisch gerechnet. Polynome a^2 2 a b b^2 Factor klammert Polynome aus (stellt den Ausdruck als Produkt dar): Factor Ausmultiplizieren mit Expand Expand Die Funktionen PolynomialQuotient, PolynomialRemainder und PolynomialQuotientRemainder liefern eine Polynomdivision: * ohne Rest * mit Rest * den Rest alleine PolynomialQuotient x^2 x 1, x 1, x PolynomialQuotientRemainder x^2 x 1, x 1, x PolynomialRemainder x^2 x 1, x 1, x Bruchrechnung Die Funktion Cancel kürzt Brüche: 6 3 x 2 y x y Cancel x 2 Apart führt eine Partialbruchzerlegung durch: 1 Apart x 1 x 2 Together bringt eine Summe von Brüchen auf einen gemeinsamen Nenner. Together Vereinfachung von Termen Simplify sucht die einfachste Darstellung eines Terms: a 5 5 a 4 b 10 a 3 b 2 10 a 2 b 3 5 a b 4 b 5 5 a 4 c 20 a 3 b c 30 a 2 b 2 c 20 a b 3 c 5 b 4 c 10 a 3 c 2 30 a 2 b c 2 30 a b 2 c 2 10 b 3 c 2 10 a 2 c 3 20 a b c 3 10 b 2 c 3 5 a c 4 5 b c 4 c 5 1 x2 1 x Manchmal genügt Simplify nicht: Log 8 Log 2 Full
vl1.nb 5 FullSimplify kennt mehr Umformungen, kann dafür aber deutlich mehr Zeit benötigen. Man kann Simplify mit Annahmen (assumptions) zusätzliche Informationen geben: x 2 x 2, x Reals x 2, x 0 Integration und Differentiation Die Funktion Integrate ( intt ) berechnet bestimmte und unbestimmte Integrale. 2 Π x 2 Sin x x 0 x 2 Sin x x Und wieder differenzeiren: D, x Statt D geht auch einfach Sin' x Listen, Vektoren, Matrizen Listen werden mit geschweiften Klammern notiert, die Elemente können beliebige Ausdrücke sein. 7, 42, "abcdef", x 2 1 Listen können generiert werden: Range 20 liste Table n^3, n, 20 Außer dem Endwert können auch Startwert und Schrittweite angegeben werden: Table n^2, n, 10, 20, 2 Auch Zuweisung an Listen ist möglich: x, y, z 3, 6, 9 Die Anzahl der Elemente einer Liste gibt Length: Length liste