Einführung  in  Mathematica  
--  Teil  1  --
zur  Vorlesung  Mathematische  Methoden  der  Physik  im  WiSe  2014/15

: :    Prof.  Dr.  Norbert  Dragon  und  PD  Dr.  Michael  Flohr    : :    08. 11. 2014    : :

Vorbemerkungen

Mathematica unterscheidet strikt zwischen Groß- und Kleinschreibung. Alle internen Befehle, Symbole, Funktionen, Konstanten usw. beginnen mit einem Großbuchstaben, bspw. Plot. Zusammensetzungen enthalten auch große Buchstaben innerhalb der Bezeichnung, z. B. ParametricPlot.

Mathematica führt Kommandos nach Eingabe durch die Tastenkombination ⇧ + ⌤ aus, während ein einfaches ⌤ lediglich einen Zeilenumbruch zur besseren Gliederung der Eingabe erzeugt.

Wenn Sie dieses Notebook zu Hause selber durcharbeiten, sollten Sie manchmal nicht nur meine Eingaben ausführen lassen, sondern darunter neue Eingabebereiche öffnen und eingene Eingaben ausprobieren. Denn durch dieses Ausprobieren lernt man am allerschnellsten, wie die Dinge funktionieren. Am Ende jedes Ein-/Ausgabebereiches erscheint ganz links ein + Zeichen, wenn man dort mit der Maus klickt oder mit  dem Cursor nach unten unter das Ende des Bereiches geht. Dies erlaubt die Auswahl der Art des neuen Eingabebereiches. Ganz rechts sieht man lange Klammerungen, die die Bereiche anzeigen. Diese sind in einem Dokument of verschachtetl, da ein einzelner Eingabebereich zum Beispiel Teil eines Abschmitts sein kann, der Teil eines Kapitels ist usw.

Arithmetik

Elementarer geht es kaum: Selbstverständlich kann Mathematica auch, was man von einem Taschenrechner erwartet! Die Eingabe wird jeweils nach Drücken von ⇧ + ⌤ am Zeilenende ausgewertet.

5-4

(Grundsätzliche Nebenbemerkung: Programmintern wird zur Befehlsverarbeitung eine sog. Infix-Notation verwendet, die in Baumstrukturen beliebig verschachtelt werden kann.)

Plus[5,Times[-1,4]]

Als Multiplikationszeichen kann Stern eingegeben werden.

7*9

Gebräuchlicher ist jedoch schlicht ein Leerzeichen, welches Mathematica bei Zahlen automatisch durch ein Kreuz ersetzt.

7 9

Probieren Sie dies nun selbst aus, indem Sie unter diesem Satz einen MathematicaInput Eingabebereich erzeugen, zwei durch ein Leerzeichen getrennte beliebige Zahlen eingeben, und dies ausführen lassen.

Potenzen werden durch das Symbol ^ erzeugt.

2^64

Mathematica bleibt exakt, wo immer möglich.

2/12

Eine Gleitkommadarstellung des vorausgegangenen Ergebnisses bekommt man mit dem Befehl N. Befehlsargumente werden immer in eckigen Klammer eingegeben. Die hier verwendete %-Variable ist stets mit der letzten (%% mit der vorletzten) Ausgabe "befüllt", was eine schnelle Methode darstellt, auf die letzten paar Ergebnisse zuzugreifen.

N[%]

Der Dezimalpunkt kennzeichnet reelle Zahlen, die Dezimaldarstellung wird dadurch erzwungen.

2./12

Konstanten sind, wie man auf diesen etwas umständlichen Wegen sieht, eingebaut.

Exp[1]

2 ArcCos[0]

Numerische Berechnungen bzw. Ausgaben können mit beliebiger Genauigkeit erfolgen: Zweites (optionales) Argument von N ist die Anzahl der Nachkommastellen. (Man beachte, dass Mathematica bei der obigen Ausgabe der Konstanten eine typographisch ansprechende Form - ℼ und e - verwendet; die Eingabe kann hingegen (auch) über den lateinischen Zeichensatz der Tastatur im internen Format - Pi und E - erfolgen.)

N[Pi,100]

N[E,1000]

Mehrere Anweisungen lassen sich in einer Zelle zusammenfassen. Aus Gründen der Übersichtlichkeit sollte mit dieser kompakten Eingabeform jedoch vorsichtig umgegangen werden.

137!
N[%]

Algebra

Definition von Funktionen

Neue Funktionen (Kleinschreibung empfohlen, um Konflikte mit den Namen der wirklich unglaublich zahlreichen in Mathematica eingebauten Funktionen zu vermeiden) werden wie folgt definiert, wobei der Doppelpunkt die Auswertung der rechten Seite verhindert, ...

f[x_]:=x^6-2x^5-30x^4+36x^3+190x^2-36x-150

... und verhalten sich wie interne Befehle (die stets einen großen Anfangsbuchstaben haben). Bei Funktionsdefinitionen mit := erfolgt keine bestätigende Ausgabe. Man beachte ferner, daß bei einem Produkt aus einer Zahl und einem Symbol ein Leerzeichen zwischen beiden Faktoren automatisch eingefügt wird. Da Variablennamen aus mehreren Buchstaben bestehen dürfen, muß/müssen beim Produkt von Symbolen das/die Leerzeichen manuell eingegeben werden.

Wichtig: An zu "befüllende" Variablen eines Befehles (jede Funktion stellt im Grunde einen Befehl dar), hier x, muß das Zeichen _ angehängt werden. Alle nicht deklarierten Symbole werde als Konstanten angesehen, siehe unten.

f[2903]

Die Zuweisung eines Wertes zu einer Variablen erfolgt mit dem üblichen Gleichheitszeichen. Hier unterdrückt das abschließende Semikolon die Bestätigungsantwort.

r=17;

f[r]

"Typographische" Eingaben, auch solche von griechischen Buchstaben, Relationssymbolen, Operatoren etc. können aus Paletten (siehe Writing Assistent im Menü Palettes) an der aktuellen Schreibposition eingegeben werden.

In folgendem Beispiel ist μ ein Argument der Funktion λ, ν hingegen nicht.

λ[μ_]:=(μ^ν)

λ[2]

ν=4

λ[2]

Selbstdefinierte Befehle und Variablen werden wie folgt gelöscht:

Clear[λ,ν]

Hier sind nun sowohl μ wie auch ν Funktionsargumente.

λ[μ_,ν_]:=(μ^ν)

λ[2,4]

Symbolische Argumente - also solche, die Variablen ohne zugewiesenen numerischen Wert enthalten - werden eingesetzt und der Gesamtausdruck gegebenenfalls vereinfacht und sortiert.

λ[(ζ-2),3]

f[1/(2t)]

Auflösen von Gleichungen

Die Nullstellenfindung ist hier analytisch möglich, und wird dann von Mathematica auch analytischdurchgeführt. Das Symbol == bezeichnet die Gleichheit zweier Ausdrücke.

Solve[x^2+p x+q==0,x]

Mathematica liefert mehrere Ergebnisse stets als Liste, eingefaßt in geschweifte Klammern, zurück; genauergesagt handelt es sich bei voriger Ausgabe um eine (zweielementige) Liste aus (einelementigen) Listen.

Der Zugriff auf ein Listenelement erfolgt über dessen Nummer (beginnend mit 1) behelfs des Zugriffsbefehls aus [[ und ]], was dann so aussiieht ...

%[[2]]

... und was sich mehrfach aneinandergereiht werwenden läßt.

%%[[2]][[1]]

Der Pfeil → symbolisiert eine Transformationsregel; dieses in Mathematica wichtige Zeichen wird bei der Eingabe automatisch aus -> erzeugt.

Der Ersetzungsoperator

Wird nur die rechte Seite obiger Lösung benötigt, muß mit dem Ersetzungsoperator /. "extrahiert" werden: x wird hier durch das ersetzt, wozu x im vorherigen Ergebnis "transformiert" wird - oder schlichter gesagt: Die Transformationsregel wird für x explizit ausgeführt. Allgemein erwartet der Ersetzungsoperator links stets einen Ausdruck und rechts eine Transformationsregel.

x/.%

f[x] /. %%

Wie SIe vielleicht wissen, ist die Nullstellenfindung für ein Polynom vom Grade größer als vier im allgemeinen analytisch nicht möglich. Mathematica gibt hier keinen Fehler, sondern die Wurzeln als "allgemeine Lösung" in Form der Vorstufe zur numerischen Lösung (gekennzeichnet mit Root) aus. Unser Polynom sechsten Grades hat also sechse Wurzeln:

Solve[f[x]==0,x]

N[%]

Numerische Nullstellensuche bekommt man so auch auf direktem Wege mit dem Ergebnis auf zehn Nachkommastellen, "natürlich" in Listenform:

NSolve[f[x]==0,x,10]

Einige weitere algebraische Manipulationen

x y^6

Anwendung (/.) einer neuen Transformationsregel (y→v+w) auf die vorherige Eingabe, also die Substitution von Symbolen durch algebraische Ausdrücke:

%/.y->v+w

Bei der Manipulation algebraischer Ausdrücke sind folgende grundsätzlicheTechniken extrem hilfreich:

Ausmultiplizieren ...

Expand[%]

... und wieder zusammenfassenm, bzw. allgemein nach einer ganzen Reihe von Regeln vereinfachen:

Simplify[%]

Eine weitere oft nützliche Vereinfachung kann das Faktorisieren sein:

Factor[3628800-10628640 x+12753576 x^2-8409500 x^3+3416930 x^4-902055 x^5+157773 x^6-18150 x^7+1320 x^8-55 x^9+x^10]

Reihenentwicklungen

Mathematica kann auf sehr allgemeine Weise Reihenentwicklungen von Funktionen berechnen. Am bekanntesten ist natürlich die Taylor- bzw. Potenzreihenentwicklung. Hier diejenige der Exponentialfunktion um 0 bis einschließlich 7. Ordung:

Series[Exp[x],{x,0,7}]

Oft benötigt man das "Abschneiden" des symbolischen Restterms:

Normal[%]

Analysis

Graphische Darstellung von Funktionen

Eine der herausragenden Fähigkeiten von Mathematica ist es, Resultate graphisch darstellen zu können. Wir Menschen können oft aus Bildern sehr viel mehr schnell ersehen, als aus komplizierten mathematischen Ausdrücken.

Mathematica wählt viele Darstellungsparameter recht vernünftig.

Plot[f[x],{x,-5,6}]

Man kann auch sehr schön drei-dimensionale Plots erstellen, die man dann mit der Maus schön drehen und so von allen Seiten bewundern kann:

Plot3D[Abs[f[x+I y]],{x,-6,6},{y,-2,2},PlotRange ->{0,1500},AxesLabel ->{x,y,"f(x+iy)"},ClippingStyle -> None]

Ach ja, bei komplexen Zahlen bezeichnet  I die imaginäre Einheit, und Mathematica rechnet mit komplexen Zahlen natürlich ganz natürlich:

I^2

Differenzieren

Erst einmal die erste Ableitung: Die Angabe einer 1 im Befehl ist optional. (Achtung: bei einer solchen Funktionsdefinition darf kein Doppelpunkt vor dem Gleichheitszeichen stehen, da ja der Differentiationsbefehl ausgeführt werden soll.)

g[x_]=D[f[x],{x,1}]

Und hier ein anspruchsvolleres Beispiel, dass wohl die wenigsten von Ihnen im Kopf hinbekommen würden:

D[Sqrt[x^3 Exp[4 x] Sin[x]],x]

Darstellung beider Funktionen, f und deren Ableitung g:

Plot[{f[x],g[x]},{x,-5,6}]

Integration

Stammfunktionen findet Mathematica strikt analytisch, wenn es eine solche gibt:

e[x_]=Integrate[f[x],x]

Und wieder ein anspruchsvolleres Beispiel, das man nicht so einfach aus dem Ärmel schüttelt:

Integrate[(2 x+3)/(x^3+x^2-2x),x]

Plot[{f[x],e[x]},{x,-5,6},PlotStyle->{Automatic,Orange}]

Nochmals die Nullstellen, die jetzt für eine spätere Verwendung in einer Liste gespeichert werden:

n=NSolve[f[x]==0,x]

Zugriff auf das erste Listenelement

n[[1]]

Extraktion und Zuweisung der ersten und zweiten Nullstelle mithilfe des bekannten Ersetzungsoperators. (Die letzte Listenebene, welche als Element bloß die Transformationsregel enthält, wird automatisch entfernt.)

a=x/.n[[1]]

b=x/.n[[2]];

WIr sehen bei dem letzten Eingabefeld auch nach Ausführen keine Ausgabe, weil diese mit Hilfe des abschließenden Semikolons ; unterdrückt wurde. Das ist vor allem praktisch, wenn man etwas definiert, was bei Auswertung einen unübersichtlich langen Ausdruck produziert, an dem man aber gar nicht interessiert ist.

Eine weitere Verwendung der Nullstellenliste: Der Ersetzungsoperator läßt sich "überladen", d.h. praktisch: Er wirkt nicht nur, wie oben genutzt, auf ein ausgewähltes, sondern auf alle Elemente einer Liste und gibt eine entsprechend lange Liste zurück, hier von (zweidimensionalen kartesischen) Koordinaten, die ihrerseits in Listenform {x,y} mit y=0 notiert werden.

Plot[f[x],{x,-5,6},Epilog->{Red,PointSize[Medium],Point[{x,0}/.n]}]

Epilog "ist" eine Liste von Zeichenbefehlen, die nach dem Plotten der Funktion(en) ausgeführt werden - und damit der Schlüssel zu vielen graphischen "Spielereien". So zeichnet Point z. B. einen Punkt, (optional) mit PointSize definierter Größe und angegebener Farbe.

Numerische Auswerung eines bestimmten Integrals

NIntegrate[f[x],{x,a,b}]

Alternative Möglichkeit zur Überlagerung von zwei Graphen - notwendig, um die Fläche unter der Abszisse nur im Integrationsintervall einzufärben. (Mit Directive werden Stilparameter zusammengefaßt; Opacity bestimmt die Transparenz der Farbe.)

Show[Plot[f[x],{x,-5,0}],Plot[f[ξ],{ξ,a,b},Filling->Axis, FillingStyle->Directive[Yellow,Opacity[0.5]]]]

Lineare Algebra

Vektoren und Matrizen

Die Behandlung von Vektoren und Matrizen erfolgt in Mathematica vollständig über Listen. Im Falle eines Vektors ist jede Komponente einfach ein Listenelement, ...

b={9,-2,7}

... im Falle einer Matrix ist jede Zeile, als Vektor notiert, ein Listenelement.

p={{2,1,3},{1,-2,1},{3,2,2}}

Die nützliche Funktion MatrixForm führt  zu einer ansprechenderen Ausgabe:

MatrixForm[%]

Clear[a,x,y,z]

c={x,y,z};

Folgende Operationen kann man (beinahe) erraten ...

Konstante mal Vektor

a b

Für das Skalarprodukt gibt es zwei Eingabevarianten, ...

b.c

Dot[b,c]

... ebenso eine typographisch schönere für das Vektorprodukt aus dem Abschnitt Typesetting des Writing Assistents.

Cross[b,c]

b\[Cross]c

(Bemerkung: Cross und Dot sind ebenso, wie eingangs bemerkten Plus und Times, Infix-Befehle - hier allerdings in sinnvollerer Anwendung.)

Det[p]

MatrixForm[Transpose[p]]

Die Funktion MatrixForm kann auch als nachgestellte Formatierungsanweisung verwendet werden;

Inverse[p]//MatrixForm

Das Produkt zweier Matrizen wird mit dem (überladenen) Punktoperator ausgeführt, der auch beim Skalarprodukt Verwendung findet.

MatrixForm[Inverse[p].p]

Zugriffe auf einzelne Elemente

Ein allgemeiner Vektor mit einer beliebigen Dimensionalität läßt sich wie folgt erzeugen:

t=Array[x,3]

Der Zugriff auf eine Komponente erfolgt wie gehabt.

t[[2]]

t[[2]]=8;

t

An folgendem Beispiel wird der Unterschied zwischen dem Zuweisungsoperator und dem Ersetzungsoperator besonders deutlich:

t/.x[3]->9

t

Oben für Vektoren gezeigtes gilt auch für Matrizen (und Objekte mit noch mehr Indizes, z.B. das ϵ-Symbol):

u=Array[d,{4,4}]

MatrixForm[u]

Alternativ:

v =Table[(Subscript[d, i ,j]),{i,4},{j,4}]

MatrixForm[v]

MatrixForm[Array[e,{3,3, 3}]]

Man kann die Matrizen automatisch mit den Werten von Funktionen befüllen lassen:

Table[h[i_,j_]=i+j,{i,4},{j,4}]//MatrixForm

Entnahme einer Zeile, also eines Elements der äußeren Liste

u[[3]]

Entnahme einer Komponente des Zeilenvektors

%[[2]]

Praktisch: Der nun hinlänglich bekannte Listenzugriff kann auch direkt mit Zeilen - und Spaltenindex durchgeführt werden.

u[[3,2]]

was eine kürzere Schreibweise für die äquivalente Langform ist:

u[[3]][[2]]

Und wie kommt man an eine Spalte? Indem man für jede Zeile ein Element rauspickt. Das sagt man Mathematica damit, dass man für den Zeilenbereich einfach All schreibt:

u[[All,2]]

Lösung von Gleichungssystemen

Automatisch ...

LinearSolve[p,b]

... oder manuell, in diesem Sonderfall "direkt"

Inverse[p].b