Einführung in Mathematica

Carsten Rezny

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

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. EscpEsc 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 Ctrl-K. Mit Ctrl-⇧-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:

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 i (EsciiEsc) angegeben:

I^2

Sqrt[-9]

Tastaturkürzel oder Paletten (wie der Classroom Assistant) ermöglichen druckreife Eingaben:

(Sqrt[(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[(Sqrt[-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:

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=76767

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:

Clear[a]

oder kürzer

a=.

Eigene Funktionen definiert man wie folgt:

g[x_]:=2Sin[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:

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:

r[x_,y_]:=Sqrt[x^2+y^2]

Wichtig: Die Parameter einer Funktion sind keine Variablen! Ihnen kann kein neuer Wert zugewiesen werden. Mehr dazu im Abschnitt zur prozeduralen Programmierung.

Stückweise definierte Funktionen

Mit Piecewise ist es möglich, eine Fallunterscheidung innerhalb der Funktionsdefinition vorzunehmen:

sgn[x_]:=Piecewise[{{-1,x<0},{0,x==0},{1,x>0}}]

Zur schöneren Darstellung gibt es EscpwEsc, direkt gefolgt von Ctrl+[,] . Eine neue Zeile für eine weitere Fälle wird mit Ctrl+↵ eingefügt:

sgn[x_]:=(Piecewise[{{-1, x<0}, {0, x==0}, {1, x>0}}])

?sgn

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+2a 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

PolynomialQuotient[x^2+x-1,x-1,x]

* mit Rest

PolynomialQuotientRemainder[x^2+x-1,x-1,x]

* den Rest alleine

PolynomialRemainder[x^2+x-1,x-1,x]

Bruchrechnung

Die Funktion Cancel kürzt Brüche:

Cancel[((6-3 x-2 y+x y)/(x-2))]

Apart führt eine Partialbruchzerlegung durch:

Apart[(1/((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:

Simplify[(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)]

Simplify[((1-(x^2))/(1-x))]

Manchmal genügt Simplify nicht:

Simplify[((Log[8])/(Log[2]))]

FullSimplify[%]

FullSimplify kennt mehr Umformungen, kann dafür aber deutlich mehr Zeit benötigen.

Man kann Simplify mit Annahmen (assumptions) zusätzliche Informationen geben:

Simplify[(Sqrt[(x^2)])]

Simplify[(Sqrt[(x^2)]),x∈Reals]

Simplify[(Sqrt[(x^2)]),x>0]

Integration und Differentiation

Die Funktion Integrate (EscinttEsc) berechnet bestimmte und unbestimmte Integrale.

(∫_0^(2π))(x^2)Sin[x]\[DifferentialD]x

∫ (x^2) Sin[x]\[DifferentialD]x

Und wieder differenzeiren:

D[%,x]

Simplify[%]

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",(Sqrt[(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]