Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte...

30
Mathematica Crash-Kurs Eine kompakte und systematische Einführung für Anfänger und Fortgeschrittene Edition 1.0 © Markus van Almsick, 1999, alle Rechte vorbehalten.

Transcript of Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte...

Page 1: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Mathematica Crash-Kurs

Eine kompakte und systematische Einführung für Anfänger und Fortgeschrittene

Edition 1.0

© Markus van Almsick, 1999, alle Rechte vorbehalten.

Page 2: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Einleitung

ZielsetzungMathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer ständig wachsenden Anzahl hinzuladbarer Packages, die die Fähigkeiten Mathematica's erweitern.

Mathematica hilft Ihnen bei der Lösung angewandeter Mathematik, die Ihnen in den Naturwissenschaften, in der Technik und im Finanzwesen begegnet. Mathematica bietet nicht nur numerischen Lösungsverfahren, sondern auch Möglichkeiten Formeln symbolisch zu bearbeiten. Die eingebauten Graphikfähigkeiten und der Folding-Editor dienen zur Dokumentation Ihrer Ausarbeitungen. Außerdem ist Mathematica eine Programmiersprache, die die Fähigkeiten unterschiedlicher Programmiersprachen, wie z.B. Fortran, C, APL, Prolog, Lisp, etc. in sich vereinigt.

Das Problem eines jeden zeitlich begrenzten Mathematica-Seminars ist die Fülle an Funktionen und neuen Konzepten, die einem Anwender möglichst umfassend vermitteln werden sollten. Dies ist leider in einem einzigen Kurs nicht machbar, sodaß Kompromisse gemacht und Schwerpunkte gesetzt werden müssen.

Gegenstand dieses Workshops ist Mathematica Version 4.0. Der überwiegende Teil des Lehrmaterials trifft aber auch auf Version 2.2 und Version 3.0 zu.

VorgehensweiseIn diesem Seminar wird Ihnen Mathematica als Programmiersprache vorgestellt.

Es gibt wie beim Erlernen einer Fremdsprache zwei Methoden sich einer Programmiersprache zu nähern:

Die Ganzheitsmethode:

Diese Methode, auch "Learning by Doing" genannt, ist der bekannte Sprung ins kalte Wasser. Durch das Nachvollzie-hen und Erweitern von Beispielrechnungen und kleineren Projekten wird die Handhabung der Software praxisorientiert vermittelt.

Der Vorteil dieser Vorgehensweise liegt im Erlangen praxisorientierten Wissens. Man bekommt die Übung mit den alltäglichen, im Detail auftretenden Schwierigkeiten fertig zu werden. Man ist nach kürzester Zeit in der Lage einfache Rechnungen erfolgreich durchzuführen. Leider kommt bei dieser Vorgehensweise das systematische Grundwissen zu kurz. Dieser Umstand ist insbesondere bei der Komplexität von Mathematica auf Dauer von Nachteil.

2 MmaCrashKurs.nb

Page 3: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Die systematische Einführung:

Eine systematische Einführung ist eine eher trockene und keineswegs praxisorientierte Angelegenheit. Das Wissen der "Vokabeln" und der "Grammatik" allein befähigt Sie nicht die "Fremdsprache" Mathematica im Alltag gewinnbringend einzusetzen. Auf längere Sicht ist jedoch eine systematische Erarbeitung der grundlegenden Strukturen einer Software immer von Vorteil. Dies trifft insbesondere auf Mathematica zu, wenn man sich mit der regelbasierten und funktionalen Programmierung befaßt.

Der Crash-Kurs

Wir werden uns in diesem Crash-Kurs aus Zeitgründen auf eine kurze, systematische Einführung beschränken müssen. Die Besprechung praxisorientierter Beispiele und die Vertiefung der Materie durch Übungen bleibt mehrtägigen Kursen und Workshops vorbehalten. Wir erarbeiten uns aber eine Ausgangsbasis, von der aus alle weiteren Fähigkeiten Mathe-matica's übersehen und leicht erlernt werden können.

à Gliederung des Crash-Kurses

In der kurzen, systematischen Einführung befassen wir uns mit Mathematica als Programmiersprache. Dementsprech-end ist der Kurs wie folgt gegliedert:

1. Die grundlegenden Datenobjekte, deren Zusammensetzung und Darstellung (Listenstrukturen)

2. Die Verarbeitung der Datenobjekte

a) Die Syntax-Erkennung der Datenobjekte (Mustererkennung)

b) Die Umwandlung der Datenobjekte (Regelsysteme)

3. Die Zusammensetzung der Verarbeitungsschritte (Programmierung)

Tabula RasaBevor wir beginnen, ist es ratsam alle Erwartungshaltungen oder Vorstellungen, die aufgrund herkömmlicher Program-miersprachen wie C, Pascal, Basic, Fortran, usw. bestehen, über Bord zu werfen. In SMP (Symbolischen Manipulation-sprogrammen) wie Mathematica treffen wir auf eine Reihe neuer Ideen. Einige alte Konzepte, wie z.B. Typendeklara-tion der Variablen oder die Trennung zwischen Daten und Operationen, werden wegfallen. Es ist daher ratsam, vorbe-haltlos an die vielen in Mathematica verwirklichten Ideen heranzutreten ohne sie gleich in Frage zu stellen. Die Vorzü-gen werden Sie sicher während des Crash-Kurses kennenlernen.

Genug der Vorrede! In medias res!

MmaCrashKurs.nb 3

Page 4: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Mathematica Listenstrukturen

ListenkonzeptAlle Datenobjekte in Mathematica sind in Listenstrukturen niedergelegt. Eine Listenstruktur besteht aus zwei Teilen, dem Listenkopf und den Argumenten.

Listenkopf[Argument1,Argument2,...]

Die Listenstruktur der Datenobjekte läßt sich mit dem Befehl FullForm offenlegen. Hier sind einige Beispiele:

Addition: 1+1

Plus[1,1]

Vektor: 1,2,3

List[1,2,3]

Formel: x2 - Cos@yD3

Plus[Power[x,2],Times[Rational[-1,3],Cos[y]]]

Graphik:

Graphics[Line[0,0,2,0,1,1,0,0]]

In Mathematica wird praktisch alles mit Listenstrukturen geregelt. Dies schließt auch die Notebooks mit ein.

Notebook[

Cell[

CellGroupData[

Cell[BoxData[\(2\ + \ 2\)], "Input"]

4 MmaCrashKurs.nb

Page 5: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Cell[BoxData[\(4\)], "Output"]

,

Open

]

],

FrontEndVersion->"Macintosh 3.0",

ScreenRectangle->0, 1024, 0, 748,

WindowSize->511, 259,

WindowMargins->36, Automatic, Automatic, 58

]

Atomare DatentypenOffensichtlich müssen die Listenstrukturen aus grundlegenden Datenobjekten zusammengesetzt werden. Diese grundleg-enden, nicht weiter aus Listen zusammengesetzten Datenobjekte bezeichnet man als atomar. In Mathematica gibt es 6 verschieden atomare Datentypen.

Ganzen Zahlen

à Eingabe

Natürliche und ganze Zahlen werden als Ziffernfolge mit oder ohne Vorzeichen (+ oder -) eingegeben. Die Ziffernfolge kann beliebig lang sein, darf aber keinen Dezimalpunkt oder Bruchstrich enthalten.

Beispiele:

1998

-12

à Eigenschaften

Ganze Zahlen haben den Listenkopf Integer

Beispiele:

Head@1999 DInteger

IntegerQ @1999 DTrue

Integer -Zahlen können beliebig groß sein und sie werden von Mathematica exakt verarbeitet.

MmaCrashKurs.nb 5

Page 6: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Beispiele:

Ein gigantischer Binomialkoeffizient

Binomial @1999, 1900 D5480307429468978819502484902052030669259099763711602614435120655666146437

447653135616660229574404763211211949641810113372635915521793535841120897 8615805047532956183962204

Eine einfache Division

1998 37

54

Rationalen Zahlen

à Eingabe

Rationale Zahlen werden durch zwei ganze Zahlen, dem Zähler und dem Nenner, mit dazwischenliegendem Bruchstrich / eingegeben. Falls Zähler und Nenner einen gemeinsamen Faktor aufweisen, wird der eingegebene Bruch von Mathe-matica umgehend gekürzt. Die gekürzte Form wird als eindeutige, kanonische Darstellung der rationalen Zahl angesehen.

Beispiele:

7 24

724

9 24

38

à Eigenschaften

In Mathematica sind rationale Zahlen ein eigenständiger, atomarer Datentyp und keine aus ganzen Zahlen zusammeng-esetzter Ausdruck, wie die folgende Typenabfrage mittels Head[] und AtomQ[] belegen.

Head@3 4DRational

AtomQ@3 4DTrue

Ebenso wie die ganzen Zahlen werden auch die rationalen Zahlen exakt ohne Rundungsfehler weiterverarbeitet. Ist dies im Rahmen der rationalen Zahlen nicht möglich, wird die Rechnung beim letzten, nicht exakten Zwischenergebnis abgebrochen.

Beispiele:

6 MmaCrashKurs.nb

Page 7: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

H2 3 - 4 5L^2

4225

Sqrt @2 - 2 9D43

Sqrt @2 - 2 7D2 $%%%%%%3

7

Man beachte, daß die exakte Verrechnung der rationalen Zahlen sehr aufwendig ist. Nach jedem Rechenschritt wird überprüft, ob Zähler und Nenner gekürzt werden können. Zu diesem Zweck ist eine Primzahlzerlegung erforderlich, was die Rechengeschwindigkeit drastisch beeinträchtigen kann.

Gleitkommazahlen

à Eingabe

Gleitkommazahlen werden bei der Eingabe durch eine Ziffernfolge mit Dezimalpunkt, dem angelsächsischen Pendant eines Dezimalkommas, gekennzeichnet. Der Dezimalpunkt darf auf keinen Fall fehlen, da sonst die Zahl als Integer aufgefaßt wird. Gleitkommazahlen werden in Mathematica durch den Datentyp Real dargestellt.

Beispiele:

Eine typische Gleitkommazahl.

[email protected] 10^8 DReal

Zum Vergleich: die Eins als Gleitkommazahl

Head@1. DReal

und die Eins als ganze Zahl.

Head@1DInteger

Eine Gleitkommazahl mit einem Exponent ungleich 0 wird durch das Anfügen einer Basis hoch Exponent, z.B. 10^3, angegeben.

MmaCrashKurs.nb 7

Page 8: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

à Eigenschaften

Gleitkommazahl können beliebig groß und präzise sein. Es gibt jedoch eine Einschränkung. Die Hardware eines Rechners umfaßt meist einen Koprozessor, der für eine schnelle Verarbeitung der Gleitkommazahlen sorgt. Damit dies auch für Mathematica zutrifft, sollten Gleikommazahlen nicht größer als $MaxMachineNumber und nicht kleiner als $MinMachineNumber sein. Außerdem sollte die Anzahl der signifikanten Ziffern in der Mantisse die $MachinePrecision nicht übersteigen. Ist die Verarbeitungsgeschwindigkeit nicht relevant, können auch Gleitkom-mazahlen bis zu einer Größe von $MaxNumber in Mathematica verrechnet werden. Die Grenze $MaxNumber kann auch verschoben werden.

Bekanntlich können in Gleitkommarechnungen Rundungsfehler auftreten, die bei instabilen numerischen Algorithmen verheerende Ausmaße annehmen können. In Mathematica kann diesem Effekt nur bedingt durch höhere Rechen-genauigkeit Einhalt geboten werden.

Beispiele:

N@Π, 100 D3.14159265358979323846264338327950288419716939937510582097494459230781640

6286208998628034825342117068

N@2 Π, 100 D6.28318530717958647692528676655900576839433879875021164194988918461563281

2572417997256069650684234136

Achtung! Mathematica kann natürlich keine Dezimalstellen erfinden. Ist die Eingabe ungenau, gilt dies auch für die Ausgabe.

[email protected] Π, 100 D6.28319

Komplexen Zahlen

à Eingabe

Ein I oder ä kennzeichnet den imaginären Teil einer komplexen Zahl. Der Wert des reellen und imaginären Anteils wird mit ganzen, rationalen oder Gleitkommazahlen angegeben.

Beispiel:

2.1 - 3 ä 5

2.1 -3 I

5

à Eigenschaften

Obwohl eine komplexe Zahl als ein aus Real- und Imaginärteil zusammengesetztes Zahlentupel aufgefaßt werden kann, handelt es sich in Mathematica um einen atomaren Datentyp. Die Einführung eines separaten, atomaren Datentyps ermöglicht eine höhere Effizienz bei der Verabeitung komplexer Rechnungen. Komplexe Zahlen haben in Mathematica den "Kopf" Complex .

8 MmaCrashKurs.nb

Page 9: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Beispiel:

Head@1 - 3.14 I DComplex

Die numerischen Eigenschaften einer komplexen Zahl richten sich nach den Eigenschaften der Zahlen, die den Real- und Imaginärteil bestimmen. So werden beispielsweise komplexe Zahlen mit ganzahligen Koeffizienten exakt verrechnet.

Beispiel:H4 + 6 äL H2 - äL25

+16 I

5

Texte

à Eingabe

Texte werden durch Anführungsstriche oben gekennzeichnet.

Die Anführungsstriche umrahmen den Text, welcher aus Buchstaben, Ziffern, Satz-, Sonder- und Formatierungszeichen bestehen kann. Einige Besonderheiten sind zu beachten:

\" kodiert Anführungstriche innerhalb eines Textes.

\t kodiert ein TAB (Tabulator-Zeichen).

\n kodiert einen Zeilenumbruch.

\\ kodiert einen backslash \ .

\xxx kodiert ein Zeichen im octalen ACII-Kode xxx .

Beispiel:

"Es gibt einige Ausnahmen:\n \\\" \t \\t \t \\n"

Es gibt einige Ausnahmen:\" \t \n

à Eigenschaften

Ein Text wird in Mathematica durch den "Kopf" String gekennzeichnet und kann durch den boolschen Befehl StringQ verifiziert werden.

Beispiel:

Head@"Mein Name ist Hase." DString

MmaCrashKurs.nb 9

Page 10: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

StringQ @"Ich weiß von nichts !" DTrue

Texte werden in Mathematica durch Text-spezifische Befehle verabeitet. Alle diese Befehle beginnen mit String .

? String*

String StringPositionStringBreak StringQStringByteCount StringReplaceStringDrop StringReplacePartStringForm StringReverseStringInsert StringSkeletonStringJoin StringTakeStringLength StringToStreamStringMatchQ

Symbole

à Eingabe

Eine beliebige Zeichenfolge, die mit einem Buchstaben beginnt und weiter aus bis zu 255 Buchstaben oder Ziffern besteht, wird von Mathematica als Symbolname und somit als Symbol aufgefaßt. Sonderzeichen (wie z.B. $, _ , / , ` , etc.) sollte man in Symbolnamen nicht verwenden, auch wenn dies Mathematica-intern geschieht (z.B. $Machine-Name). Außerdem ist zu beachten, daß zwischen Groß- und Kleinschreibung unterschieden wird.

Seit Version 3.0 umfaßt Mathematica eine beachtliche Menge mathematischer, griechischer und internationaler Buchsta-ben und Sonderzeichen (wie z.B, Ω = Ω, ß = ß, ü = ü, ∑ = ∑). Diese können, sofern Sie nicht wie zum Beispiel ∑ mit einer Funktion behaftet sind, in Symbolnamen eingebaut werden. (Siehe hierzu A.12.1 Introduction)

à Eigenschaften

Symbole dienen als Platzhalter für alle erdenklichen Mathematica-Ausdrücke und als Namensgeber für Typendeklara-tionen oder Operationen. Da Symbole in einer SMP-Sprache wie Mathematica eine zentrale Rolle spielen, wollen wir an dieser Stelle nicht vorgreifen. Der Gebrauch der Symbole wird im Laufe dieses Kurses mehrfach eingehend diskutiert.

Beispiele:

Das Symbol Pi bzw. Π dient als Platzhalter einer numerischen Konstante.

Head@ΠDSymbol

Den numerischen Wert des Symbols Pi können wir mit der Funktion N extrahieren.

? N

N@ausdr D ergibt den numerischen Wert von ausdr.N@ausdr, n D versucht, ein

Ergebnis mit n -stelliger Präzision anzugeben.

10 MmaCrashKurs.nb

Page 11: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

N@Pi, 50 D3.1415926535897932384626433832795028841971693993751

Das Symbol Sin dient als Name einer Funktion.

Head@Sin DSymbol

Sin @Pi 3D!!!3

2

Das Symbol Expand dient als Name eines Mathematica-Kommandos.

Head@Expand DSymbol

Expand @Hx - 1L3 D-1 + 3 x - 3 x 2 + x3

ListensemantikWie bereits erwähnt, können atomare Ausdrücke zu komplexeren Ausdrücken zusammengesetzt werden. Es gibt zwei semantische Interpretations- bzw. Einsatzmöglichkeiten dieser Listenstrukturen.

à Datenstrukturen

Computerdaten bestehen immer aus zwei Teilen; aus den "reinen" Daten, die als Bits und Bytes gespeichert werden, und aus deren Semantik, die angibt, wie die "reinen" Daten zu interpretieren sind.

In herkömmlichen Programmiersprachen wird die Semantik der Variablen und Konstanten zu Anfang eines jeden Programms durch eine Typendeklaration festgelegt. Die Zuweisung und Verarbeitung der "reinen" Daten wird hiervon getrennt später vorgenommen.

In Mathematica werden die reinen Daten und deren Typendeklaration nicht voneinander getrennt. Alle Daten tragen zu jeder Zeit ihre Typendeklaration als Aushängeschild mit sich. In der oben angesprochenen Listenstruktur geschieht dies wie folgt:

Typendeklaration[Daten...]

Beispiel:

Im Zusatzpaket Algebra`Quaternions` wird der Zahlentyp der Quaternionen, eine nicht-kommutative Erweiter-ung der komplexen Zahlen, definiert. Ein Quaternion a + b ä + c ü + d ä ü mit reellen a,b,c,d, sowie ä2 = ü2 = -1 und ä ü = -ü ä, besteht aus 4 Komponenten und ist in Mathematica wie folgt implementiert.

a + b ä + c ü + d ä ü ® Quaternion[a,b,c,d]

MmaCrashKurs.nb 11

Page 12: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Die Definition mit dem Listekopf Quaternion ist zunächst willkürlich. Erst die im Zusatzpaket implementierten Funktionen und Operationen, die diese neue Listenstruktur verarbeiten, geben der Typendeklaration einen Sinn.

Summation:

Quaternion :Quaternion @a_, b_, c_, d_ D + Quaternion @e_, f_, g_, h_ D : =

Quaternion @a + e, b + f, c + g, d + hDNicht-kommuntative Multiplikation:

Quaternion :Quaternion @a_, b_, c_, d_ D ** Quaternion @w_, x_, y_, z_ D : =

Quaternion @a w - b x - c y - d z,a x + b w + c z - d y,a y - b z + c w + d x,a z + b y - c x + d wD

à Funktionsstrukturen

InMathematicawerden auch Funktionen,Operationen und Anweisungen in Listenform eingegeben und gegliedert.In diesem Zusammenhang bezeichnet der Listenkopf die Funktion,Operation oder das Kommando.Die Listenargumente stellen die entsprechenden Argumente dar.

Operation[Argumente...]

Diese offensichtliche Konstruktion werden wir anhand einiger Beispiel erläutern.

Beispiele:

Einfache Addition:

Plus @1, 1 DSkalarprodukt (im Englischen: dot product) zweier 3-dimensionaler Vektoren:

Dot @List @a, b, c D, List @x, y, z DDIntegration der Funktion sin2 HxL mit der Integrationsvariablen x :

Integrate @Power @Sin @xD, 2 D, x DListendarstellung

Man hat bereits sehen können, daß für gewöhnlich die Ein- und Ausgaben nicht in Listenform übergeben wird. Mathe-matica bietet dem Benutzer die Möglichkeit andere Formate zu nutzen. Intern allerdings gilt für jeden Ausdruck die oben angegebene Listenstruktur.

Eine jede Eingabe in ein Mathematica-Notebook wird gemäß der im Mathematica Buch unter A .2 .7 aufgeführten Umformungsregeln in eine Listenstruktur umgewandelt.

12 MmaCrashKurs.nb

Page 13: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Beispiele:

a + b ® Plus @a, b D81, 2, 3 < ® List @1, 2, 3 Dexpr Pi T ® Part @expr, i Dà f @xD âx ® Integrate @f @xD, x D

Bei der Ausgabe kann man zwischen verschiedenen Formaten wählen. Ohne expliziete Anweisung stellt Mathematica die Listenstrukturen in StandardForm dar. Eine traditionelle mathematische Notation erhält man mit TraditionalForm .

Beispiel:

Integrate @Abs@Sin @2 x DD x^2, x DStandardForm:à Abs@Sin @2 x DD

x2

âx

TraditionalForm:à sinH2 xL¤

x2 â x

Um den Datenaustausch mit anderen Programmen zu vereinfachen, gibt es einige spezielle Ausgabeformate.

Beispiel:

Programmiersprache C

CForm@Abs@Sin @2 x DD x^2 DAbs(Sin(2*x))/Power(x,2)

Typesettingsystem TeX

TeXForm@Integrate @Abs@Sin @2 x DD x^2, x DD\int \frac\MfunctionAbs(\sin (2\,x))\Mfunctionx^2\,dx

Mathematica Verarbeitungsmechanismen

Anwendung Eingebauter BefehleViele Mathematica-Anwender beschränken sich auf den einfachen Einsatz der eingebauten Mathematica-Befehle. Selbst bei dieser simplen Nutzung des Systems werden einige Konzepte übersehen, die hier schnell angesprochen werden sollen.

MmaCrashKurs.nb 13

Page 14: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Auffinden eines Mathematica -Befehls

Es ist unmöglich alle Mathematica-Befehle zu kennen. Daher bietet das System einige Hilfestellungen, um die benötigten Befehle zu finden.

à Systematische Namensgebung

Alle Befehle beginnen mit einem Großbuchstaben.

Befehle mit zusammengesetzte Befehlsnamen werden zusammengeschrieben. Jedes Teilwort beginnt mit einem Großbuchstaben.

Die Befehlsnamen werden nicht abgekürzt. Außnahmen sind nur die Standardkürzel bei mathematischen Funktionen (Sin , Tan, etc.) sowie (N, D)

Numerische Kommandos beginnen mit N

Boolsche Funktionen enden mit Q

Formatierungsbefehle enden mit Form

etc.

à Online Hilfe

In einer Eingabezelle kann man mit ? ein Kurzbeschreibung eines Befehls erhalten.

Außerdem kann man mit dem Jokerzeichen * Befehle leicht ausfindig machen.

à Help Browser

Der Help Browser im Mathematica-Menü gewährt eine ausführliche Hilfestellung.

Insbesondere sind die Querverweise bei der Beschreibung eingebauter Funktionen hilfreich.

à Input Menü

Im Eingabemenü befinden sich Kommandos, die Mathematica-Befehle erstellen oder ergänzen.

Angabe der Argumente

Es gibt zwei Methoden einer Funktion oder einem Kommando Argumente zu überreichen.

à Stellungsdefinierte Argumente

Stellungsdefinierte Argumente sind in der Mathematik hinreichend bekannt.Bei einer geringen Anzahl von Argumenten werde diese bei der Übergabe an eine Funktion durch Ihre Stellung in der Argumentenkette definiert.

Beispiel:

14 MmaCrashKurs.nb

Page 15: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Das erste Argument einer Besselfuntkion gibt die Ordnung der Funktion, das zweite Argument die komplexe Variable an.

? BesselJ

BesselJ @n, z D gives the Bessel function of the first kind J Hn, z L.

BesselJ A2, 3 -ä2

E N

0.521116 - 0.00874396 ä

à Optionen

In Mathematica gibt es eine ganze Reihe von Kommandos, die sehr viele Argumente haben können. In diesen Fällen ist die Verwendung von stellungsdefinierten Argumenten unpraktisch, da immer alle Argumente aufgelistet werden müßten. Stattdessen bekommen die Argumente einen Namen. Dieser Argumentenname muß bei der Argumentenüber-gabe mit angegeben werden. In Mathematica geschieht dies in Form einer Ersetzungsregel (siehe weiter unten).

Beispiel:

Das Plot3D -Kommando hat 3 stellungsdefinierte Argumente und ein große Anzahl von Optionen.

gr = Plot3D @Sin @x y D, 8x, -2, 2 <, 8y, -2, 2 <,PlotPoints ® 30, Mesh ® False,AxesLabel ® 8"x", "y", "sin Hx*yL" <D;

-2

-1

0

1

2

x

-2

-1

0

1

2

y

-1-0.5

00.51

sinHx*yL2

-1

0

1x

Argumente mit Namen müssen nur angegeben werde, wenn der Wert des Argumentes von einem vorher definierten Default -Wert abweicht. Die Argumentenangabe ist somit optional. Daher auch die Bezeichnung Option .

Optionen, die für Plot3D gesetz werden können:

MmaCrashKurs.nb 15

Page 16: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Options @Plot3D D8AmbientLight ® GrayLevel @0D, AspectRatio ® Automatic, Axes ® True,AxesEdge ® Automatic, AxesLabel ® None, AxesStyle ® Automatic,Background ® Automatic, Boxed ® True, BoxRatios ® 81, 1, 0.4 <,BoxStyle ® Automatic, ClipFill ® Automatic, ColorFunction ® Automatic,ColorFunctionScaling ® True, ColorOutput ® Automatic,Compiled ® True, DefaultColor ® Automatic, Epilog ® 8<,FaceGrids ® None, HiddenSurface ® True, ImageSize ® Automatic,Lighting ® True, LightSources ® 8881., 0., 1. <, RGBColor @1, 0, 0 D<,881., 1., 1. <, RGBColor @0, 1, 0 D<, 880., 1., 1. <, RGBColor @0, 0, 1 D<<,Mesh ® True, MeshStyle ® Automatic, Plot3Matrix ® Automatic,PlotLabel ® None, PlotPoints ® 15, PlotRange ® Automatic,PlotRegion ® Automatic, Prolog ® 8<, Shading ® True,SphericalRegion ® False, Ticks ® Automatic, ViewCenter ® Automatic,ViewPoint ® 81.3, -2.4, 2. <, ViewVertical ® 80., 0., 1. <,DefaultFont ¦ $DefaultFont, DisplayFunction ¦ $DisplayFunction,FormatType ¦ $FormatType, TextStyle ¦ $TextStyle <

Abruf der angewendeten Default -Werte:

Options @gr, PlotRange D8PlotRange ® Automatic <AbsoluteOptions @gr, PlotRange D8PlotRange ® 88-2., 2. <, 8-2., 2. <, 8-1.04967, 1.04967 <<<

Verwertung der Ausgabe

Solange die Ausgabe von Mathematica-Funtkionen aus einfachen Zahlen und Formeln besteht, ist deren weitere Verwendung offensichtlich. Häufig werden jedoch Ersetzungsregeln erzeugt, deren Handhabung nicht allen geläufig ist.

Beispiel:

Solve @a2 - 2 b Ha - 1L c, a D99a ® b -!!!!!!!!!!!!!!!!!!!!!!!!!!!

-2 b + b2 + c =, 9a ® b +!!!!!!!!!!!!!!!!!!!!!!!!!!!

-2 b + b2 + c ==Beide Lösungen der quadratischen Gleichung werden als Ersetzungregeln für a ausgegeben. Diese Ersetzungregeln können dann umgehen auf beliebige Formeln angewendet werden.

a2 . %9Ib -!!!!!!!!!!!!!!!!!!!!!!!!!!!

-2 b + b2 + c M2, Ib +

!!!!!!!!!!!!!!!!!!!!!!!!!!!-2 b + b2 + c M2 =

Man kann natürlich auch einen Lösungszweig auswählen.

a2 . First @%%DIb -!!!!!!!!!!!!!!!!!!!!!!!!!!!

-2 b + b2 + c M2

16 MmaCrashKurs.nb

Page 17: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Umbau von ListenEine Listen kann als Baumstruktur interpretiert werden.

Beispiel:

x^2 a - b * Sin @xD == x

Dieser Ausdruck entspricht folgender Baumstruktur.

Es gibt diverse Mathematica-Befehle, um eine derartige Baumstruktur zu analysieren und zu manipulieren.

Man stellt schnell fest, daß die direkte Manipulation von Listenstruktur ein Μ-sames Geschäft ist. Daher gehen wir nicht näher darauf ein, sonderen widmen uns den Symbol-orientierten Ersetzungsregeln.

Analyse

? Head

? Depth

? Length

? LeafCount

? Position

Manipulation

? Part

MmaCrashKurs.nb 17

Page 18: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

? Level

? Delete

? Insert

? ReplacePart

ErsetzungsregelnEs ist ein leichtes die eingebauten Mathematica-Befehle durch lokal oder global wirkende Ersetzungsregeln Marke Eigenbau zu ergänzen.

Eine Regel besteht immer aus zwei Teilen:

1. einer Bedingung, die angibt wann eine Regel angewendet werden kann.

2. einem ausführenden Teil, der angibt was geschehen soll, falls die Bedingung erfüllt ist.

Bedingung ® ausführende Anweisung

Komplexe, mathematische Bedingungen werden in Mathematica mit Musten, sogenannten Patterns, implementiert. Dies ist Thema des nächsten Unterkapitels. Hier befassen wir uns zunächst mit der Eingabe einfacher Ersetzungsregeln.

Lokale Ersetzungsregeln

Lokale Ersetzungsregeln werden durch einen Pfeil gekennzeichnet.Eine lokale Ersetzungsregel wirkt nur auf den Ausdruck,auf den sie explicit angesetzt wird.

Beispiel:

Rekursion der Fibonacci-Zahlen.

? ReplaceAll

ausdr . regeln wendet eine Regel oder eine Liste von Regeln an undversucht so jeden Teil des Ausdrucks ausdr zu transformieren.

?ReplaceRepeated

expr . regeln führt wiederholt Ersetzungendurch, bis sich der Ausdruck ausdr nicht mehr ändert.

fib @5D . 8fib @0D ® 1, fib @n_D ® n fib @n - 1D<5 fib @4Dfib @5D . 8fib @0D ® 1, fib @n_D ® n fib @n - 1D<120

18 MmaCrashKurs.nb

Page 19: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Globale Ersetzungsregeln

Globale Ersetzungsregeln gelten für eine ganze Mathematica-Sitzung, es sei denn sie werden zwischenzeitlich gelöscht. Globale Ersetzungsregeln werden als Anweisung mit Gleichheitszeichen = implementiert.Sie kommen automatisch zur Anwendung, indem ein Symbol als Auslöser agiert. Ein Replace -Befehl oder dergleichen wird nicht mehr benötigt.

Beispiel:

Das Symbol a soll von Π3

repräsentiert werden.

a = Π 3;

Von nun an wird a immer mit Π3

substituiert,

1 - Sin @aD1 -

!!!3

2

egal ob gewollt oder ungewollt.

Expand @H1 - aL3 D1 - Π +

Π2

3

-Π3

27

Alle durch das Symbol a ausgelösten Ersetzungsregeln kann man mit ? in Erfahrung bringen.

? a

Global`a

a = Π3

Um eine bestimmte globale Zuweisung zu löschen, nimmt man den linken Teil der Zuweisung und wendet =. darauf an.

a =.

Um alle mit einem Symbol assozierten globalen Ersetzungsregeln zu entfernen, benutzt man Clear .

Clear @aD;

Ersetzungsregeln mit verzögerter Evaluierung

Den Mechanismus der verzögerten Evaluierung gibt es sowohl für lokale wie auch für globale Ersetzungsregeln.-Verzögerte Zuweisungen werden mit ¦ statt ® und := statt = gekennzeichnet. Der Unterschied zwischen Ersetzung-sregeln mit unmittelbarer und mit verzögerter Evaluierung besteht in der Verabeitung des zu substituierenden Aus-drucks auf der rechten Seite der Ersetzungsregel.Normalerweise wird die rechte Seite gleich bei der Eingabe der Ersetzungsregel evaluiert,also noch bevor die Ersetzungsregel zur Anwendung kommt.Bei der verzögerten Evaluierung ist dies nicht der Fall.Der zu substituierende Ausdruck wird ohne jede Änderung übernommen und erst nach der Susbtitution evaluiert.

Beispiel:

MmaCrashKurs.nb 19

Page 20: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Alle für das Beispiel relevanten Symbole werden zunächst gelöscht.

Clear @a, b DFall der unmittelbaren Evaluierung:

Angenommen b hat einen beliebigen Wert .... also gleich 1.

b = 1;

Wir setzen a gleich b, genaugenommen a gleich dem Ergebnis von b und somit gleich 1.

a = b

1

? a

Global`a

a = 1

Ändert sich b später, z.B.

b = 2;

hat dies keine Auswirkungen auf a, da vorhin ja das Ergebnis von b und nicht das Symbol b dem a zugeschrieben worden ist.

a

1

Fall der verzögerten Evaluierung:

Zunächst wird wieder alles gelöscht.

Clear @a, b, c DAngenommen b hat einen beliebigen Wert .... also wieder die 1.

b = 1;

Wir setzen a gleich b, aber mit verzögerter Zuordnung.

a := b

? a

Global`a

a : = b

a ist also gleich Symbol b und nicht unbedingt gleich 1, obwohl dies momentan aufgrund der obigen Wertzuweiung zutrifft.

a

1

Ändert sich b später,

20 MmaCrashKurs.nb

Page 21: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

b = 2;

hat dies eine Auswirkungen auf a, da vorhin das b dem a zugeschrieben wurde. b hat nun einen anderen Wert und somit auch a.

a

1

Das gleiche gilt für lokale Ersetzungsregeln.

Beispiel:

Fall der unmittelbaren Evaluierung:

a sei eine Zufallszahl zwischen 0 und 1.

a = [email protected]

Listet man a nun 3 mal auf, bekommt man 3 mal die selbe Zufallszahl.

Do@Print @aD, 83<D0.430789

0.430789

0.430789

Fall der verzögerten Evaluierung:

Bei einer verzögerten Evaluierung produziert der Zufallsgenerator bei jedem Aufruf des Symbols a eine neue Zufallszahl.

a : = Random@DDo@Print @aD, 83<D

0.890726

0.210503

0.954991

Kontextabhängige Ersetzungsregeln

Die bisher vorgestellten Ersetzungsregeln substituieren ein Symbol unter allen Umständen. Das aber ist nicht immer erwünscht! Es besteht die Möglichkeit eine Substitution auf eine bestimmte Situation (einen bestimmten Kontext) zu beschränken. Hierzu ein motivierendes Beispiel.

Beispiel:

Die physikalische Konstante der Lichtgeschwindigkeit c soll implementiert werden. Sie soll symbolisch gehandhabt werden, es sei denn eine numerische Näherung wird angefordert. Um dies zu erreichen, wird der numerische Wert der Lichtgeschwindigkeit nicht wie vorhin dem Symbol als OwnValue , sondern als NValue zugeordnet.

Clear @cD;

MmaCrashKurs.nb 21

Page 22: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Eine NValue -Zuweisung erfolgt, wenn das Symbol zur Linken mit dem N-Operator versehen wird.

N@cD = 2.99792458 10 ^8 Meter Second

2.99792 ´ 108 Meter

Second

?c

Global`c

N@cD = H2.99792458*^8 * Meter L Second

c wird bei der symbolischen Rechnungen nicht angetastet!

c^2

c2

Erst wenn ein numerischer Wert berechnet werden soll, wird die Ersetzungsregel aktiviert.

N@c^2 D8.98755 ´ 1016 Meter 2

Second 2

Die eingebauten Konstanten Pi und E verhalten sich ebenso.

à OwnValue-Zuweisung

Ersetzungregel wird auf jedes Symbol symb angewendet.

symb = ausdr

symb : = ausdr

à NValue-Zuweisung

Ersetzungregel wird nur im numerischen Kontext auf das Symbol symb angewendet.

N@symbD = ausdr

N@symbD : = ausdr

à FormatValue-Zuweisung

Ersetzungregel wird bei der Ausgabe in Format form auf das Symbol symb angewendet.

Format @symb, form D = ausdr

Format @symb, form D : = ausdr

à DownValue-Zuweisung

Ersetzungregel für Funktionen, Operationen und Datentypen mit dem Listenkopf symb.

22 MmaCrashKurs.nb

Page 23: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

symb@ausdr1 D = ausdr2

symb@ausdr1 D : = ausdr2

à UpValue-Zuweisung

Objektorientierte Ersetzungsregel für Funktionen, Operationen und Datentypen mit dem Argument symb.

ausdr1 @symbD ^ = ausdr2

ausdr1 @symbD ^: = ausdr2

symb : ausdr1 @ ..., symb, ... D ^ = ausdr2

symb : ausdr1 @ ..., symb, ... D ^: = ausdr2

MustererkennungIm Gegensatz zur Numerik ist die Syntaxerkennung in der Symbolik recht kompliziert. Um zum Beispiel eine Glei-chung auflösen zu können, muß man den Gleichungstyp (linear, quadratisch, transzendent,...) identifizieren. Dies ist natürlich schwieriger als zum Beispiel die Summanden in einer Summe zu lokalisieren. Derartige Aufgaben werden in der Numerik bereits automatisch von den Compilern und Interpretern der Computersprachen übernommen. In der Symbolik muß man selber aktiv werden.

Um das Problem der mathematischen Syntaxerkennung bewältigen zu können, bedient man sich in Mathematica der eingebauten Mustererkennung. Die Mustererkennung arbeitet mit sogenannten Patterns, die wie Schablone gehandhabt werden.

_ ein Muster für einen beliebigen Ausdruck

x_ ein Muster mit dem Namenx für einen beliebigen Ausdruck

x: pattern ein Muster mit dem Namenxpattern? test ein Muster, das paßt, wenn der test True ergibt

_h ein Muster für einen beliebigen Ausdruck mit Kopfh

x_h ein Muster mit Namenx für für einen beliebigen Ausdruck mit Kopfh

__ ein Muster für eine Folge von einem oder mehreren Ausdrücken

___ ein Muster für eine Folge von keinem oder mehreren Ausdrücken

x__ und x___ ein Muster mit Namenx für eine Folge von Ausdrücken

__h und ___ h ein Muster für eine Folge von Ausdrücken mit Kopfh

x__h und x___ h ein Muster mit Namenx für eine Folge von Ausdrücken mit Kopfh

x_: v ein Muster mit dem Vorgabewertv

x_h: v ein Muster mit dem Vorgabewertv für einen Ausdruck mit Kopfh

x_. ein Muster mit einem globale definierten Vorgabewert

Optional @x_hD ein Muster mit einem globale definierten Vorgabewert für einen Ausdruck mitK

muster.. ein Muster, das ein- oder mehrmals wiederholt wirdmuster... ein Muster, das kein oder mehrmals auftritt

muster1 È muster2 È … ein Muster, das mindestens mit einem dermusteri übereinstimmen mußmuster; cond ein Muster, das paßt, wenn die BedingungcondTrue ergibt

HoldPattern @musterD ein nicht evaluiertes MusterVerbatim @ausdrD ein Ausdruck, der wortwörtlich passen muß

MmaCrashKurs.nb 23

Page 24: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Beispiele:

Die Muster richten sich nach den Listenstrukturen und können somit alles mögliche erfassen.

SäuferFunktion @x_ D : =Print @"Diese Funktion hat ", x, " intus !" D

SäuferFunktion @2 Bier + Schnaps DDiese Funktion hat 2 Bier + Schnaps intus !

Muster mit gleichem Namen können nur identische Listen erfassen.

TennisFunktion @scoreA_, scoreB_ D : =Print @"Es steht ", scoreA, " zu ", scoreB, " !" D;

TennisFunktion @score_, score_ D : = Print @"Einstand !" D;

TennisFunktion @30, 40 DEs steht 30 zu 40 !

TennisFunktion @40, 40 DEinstand !

Muster könne auf einen beliebigen Datentyp geeicht werden.

PrimfaktorZerlegung @n_Integer D : = FactorInteger @nD;

Die Oder-Verknüpfung der Muster (|) sollte nicht mit einer Boolschen Oder-Verknüpfung (||) verwechselt werden.

RationalQ @Hx_Integer È x_Rational LD : = True;

RationalQ @x_ D : = False;

Alles in Mathematica besteht aus Listenstrukturen. Folglich sind auch Muster als Listen angelegt. Sie können dementsprechend zusammengesetzt und kombiniert werden.

log @3 a b^2 cDlog @Times @x_, y_ DD : = log @xD + log @yD;log @Power @x_, n_ DD : = n log @xDlog @3 a b^2 cD

ListenattributeEinige wichtige Fähigkeiten von Mathematica laufen im Hintergrund ab und werden daher kaum wahrgenommen.

Beispiele:

24 MmaCrashKurs.nb

Page 25: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Sin @80, Π 5, Π 3, Π 2, Π<D90,12

$%%%%%%%%%%%%%%%%%%%%%%%%%%%12

I5 -!!!

5 M ,!!!

3

2, 1, 0 =

Hb + a + 1L1 + a + bHa bL c

a b c

Hier finden Umformungen statt, die durch Listenattribute geregelt werden.

Listen mit dem Listenkopf Sin haben beispielsweise das Attribut Listable , aufgrund dessen der Sin automatisch auf die Elemente einer Liste projeziert wird.

?? Sin

Sin @zD gives the sine of z.

Attributes @Sin D = 8Listable, NumericFunction, Protected <Die Addition mit dem Listekopf Plus ist mit dem Attribut Orderless versehen. Daher ist die Addition in Mathemat-ica eine kommutative Operation. Die Summanden werden automatisch sortiert.

?? Plus

x + y + z represents a sum of terms.

Attributes @Plus D = 8Flat, Listable, NumericFunction, OneIdentity, Orderless ,

Default @Plus D : = 0

Die Addition mit dem Listekopf Times ist mit dem Attribut Flat und OneIdentity versehen.Somit ist die Multip-likation in Mathematica eine assoziative Operation.Verschachtelte Times -Listen werden automatisch entschachtelt und somit platt, also Flat -gemacht. Times[a] ® a , was der OneIdentity entspricht.

?? Times

x*y*z or x y z represents a product of terms.

Attributes @Times D = 8Flat, Listable, NumericFunction, OneIdentity, Orderles s

Default @Times D : = 1

Die Listenattribute werden übrigens auch bei der Mustererkennung berücksichtigt. Daher konnte zum Beispiel die log -Regel für ein Produkt mit 2 Faktoren auch auf ein Produkt mit 4 Faktoren angewendet werden. Mathematica dachte sich das Produkt verschachtelt.

log @3 a b^2 cD ® log @3 Ha Hb2 c-1 LLDMathematica Programmierung

Mathematica ist das Esperanto der Programmiersprachen. Es umfaßt so unterschiedliche Sprachen wie Fortran, Prolog oder APL. Die Programmiersprachen lassen sich grob in drei Typen einteilen.

Prozedurale Sprachen (Fortran, Basic, Pascal, C)

MmaCrashKurs.nb 25

Page 26: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Regelbasierte Sprachen (Prolog, Lisp)

Funktionale Sprachen (APL, Excel)

Dementsprechend werden wir hier vorgehen.

Prozedurale ProgrammierungDer prozedurale Programmierstil ist der bekannteste. Wie beispielsweise in Fortran, Pascal oder C werden hier die Befehle einer Programmiersprache durch sogenannte Steuerbefehle (z.B. Goto , If , While , Do-Loops, etc.) zu einem Algorithmus zusammengestellt. Entsprechende Steuerbefehle gibt es auch in Mathematica.

Der Gebrauch der Befehle Do, For , While , If , ... etc versteht sich von alleine.

Befehle die einfach nacheinander ausgeführt werden sollen, müssen mit Semikolon getrennt werden.

Mit den Mathematica-Befehlen Block und Module können lokale Variablenumgebungen geschaffen werden. Block schirmt die Werte der lokalen Variablen ab. Module gewährleistet auch eine Abgrenzung der Variablennamen.

Beispiel:

Berechnung der Fibonacci-Zahlen:

FibonacciZahl @n_Integer D : =Block @8dummy, fib0 = 1, fib1 = 1< H*Initialisierung lokaler Variablen *L, Do @

dummy= fib0; H*Rekursion: *Lfib0 = fib1; H*fib @nD=fib @n-1D+fib @n-2D*Lfib1 += dummy,8n - 2<D;

Return @fib1 D H*Ausgabe des Ergebnisses *LD;

Table @FibonacciZahl @i D, 8i, 10 <D81, 1, 2, 3, 5, 8, 13, 21, 34, 55 <Regelbasierte Programmierung

Bei der regelbasierten Programmierung wird ein Programm nicht durch eine Aneinanderreihung von Anweisungen erstellt, sondern aus Umformungsregeln zusammengesetzt. Umformungsregeln haben wir bereits kennengelernt. Regeln bestehen aus einem Kriterium, das ihre Anwendbarkeit spezifiziert, und aus einem ausführenden Teil, der angibt wie gemäß der Regel ein Ausdruck bzw. dessen Argumente umzuformen sind.

Die Anwendbarkeitskriterien werden in Mathematica durch Muster kodiert.

Der ausführende Teil beschränkt sich in einer rein regelbasierten Programmierung auf Substitution und die direkte Anwendung eingebauter Befehle.

Ein typisches Beispiel regelbasierter Programmierung ist die Differentiation von Polynomen:

26 MmaCrashKurs.nb

Page 27: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Clear @MyDiff DKonstantenregel:

MyDiff @c_, var_ D : = 0 ; FreeQ @c, var DPotenzregel (mit Kettenregel):

MyDiff @var_, var_ D : = 1;

MyDiff @expr_ ^n_, var_ D : =n expr ^ Hn - 1L * MyDiff @expr, var D ; FreeQ @n, var D

Summenregel:

MyDiff @f_ + g_, var_ D : = MyDiff @f, var D + MyDiff @g, var DProduktregel:

MyDiff @f_ g_, var_ D : = MyDiff @f, var D g + f MyDiff @g, var DDiese vier Differentiationsregeln genügen bereits, um alle Polynome mit einer Variable zu differenzieren

MyDiff @2 x^2 - x Ha - xL, x D-a + 6 x

MyDiff @Ha - xL^2 x, x D-

Ha - xL2

x2

-2 Ha - xL

x

Funktionale ProgrammiergungDas Credo der funktionalen Programmierung ist die Vermeidung von Programmschleifen, die in prozeduralen Program-men häufig auftreten. Stattdessen versucht man Operationen einzuführen, die Listen, Matrizen usw. als ganzes verarbe-iten. Die Listen orientierte Datenstruktur Mathematica's kommt diesem Programmierstil entgegen.

Da in der funktionalen Programmierung Programmschleifen vermieden werden, lassen sich die Programme als Ver-schachtelung von Funktionen schreiben. Daher der Terminus Technicus.

In Mathematica gibt es von der Rekusrion einmal abgesehen verschiedene Methoden um Programmschleifen zu umgehen.

Alle Funktionen, die mit dem Attribut Listable versehen sind, werden bei Anwendung auf eine Liste mit Kopf List automatisch auf deren Elemente projeziert.

Attributes @Log D8Listable, NumericFunction, Protected <Log @81, 2, 3, 4, 5 <D80, Log @2D, Log @3D, Log @4D, Log @5D<

MmaCrashKurs.nb 27

Page 28: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Außerdem gibt es eine Reihe von Steuerbefehlen, die die Verarbeitung ganzer Listenstrukturen ohne Schleifen ermöglichen.

Map@f, 81, 2, 3 <D8f @1D, f @2D, f @3D<Apply @Times, a + b + cDa b c

Thread @f @81, 2, 3 <, 8a, b, c <DD8f @1, a D, f @2, b D, f @3, c D<Inner @Power, 8a, b, c <, 81, 2, 3 <, Plus Da + b2 + c3

Apply @Times, Range @10DD == 10 !

True

Die Befehle Partition und Flatten sind dazu geeignet, Listen in die gewünschte Form zu bringen.

In der funktionalen Programmierung werden häufig Funktionen nur einmal benötigt. Um daher nicht jedesmal einen neuen Funktionsnamen einführen zu müssen, gibt es sogenannte pure Funktionen. Sie brauchen weder Variablen- noch Funktionsnamen. Die Bezeichnung "pure" Funktion ist etwas mißglückt. Die Umschreibung "anonyme" Funktionen wäre zutreffender.

Beispiel:

Es soll eine Funktion definiert werden, die ihr Argument quadriert und mit 1 addiert. Diese Funktion soll sodann auf eine Zahlenlisten angewendet werden.

Zunächst die herkömmliche Methode. (3 Schritte sind erforderlich!)

ClearAll @f D;

f @x_ D : = x^2 + 1;

Map@f, 81, 2, 3, 4, 5 <D82, 5, 10, 17, 26 <Nun die selbe Implementation mit einer reinen Funktion. (Nur ein Schritt ist erforderlich!)

Map@H#^2 + 1L &, 81, 2, 3, 4, 5 <D

Mathematica PackagesDa Mathematica ein Interpreter ist, werden die Programme nicht compiliert. Um sie jedoch anderen Mathematica-Nutzern zugänglich zu machen, müssen die Programme in sogenannten Packages verpackt werden. Durch Packages wird:

28 MmaCrashKurs.nb

Page 29: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

1. eine lokale Variablenumgebung sichergestellt, und

2. eine Schnittstelle für den Anwender definiert.

Packages werden in Dateien mit dem Kürzel .m abgespeichert. Die Dateien sind wie folgt strukturiert.

Die erste Zeile signalisiert den Begin eines Mathematica-Package hier mit dem Namen "Seminar`".

BeginPackage @"Seminar`" DHiernach werden, falls erfoderlich, andere Packages hinzugeladen.

Needs@"PackageXY`" D

MmaCrashKurs.nb 29

Page 30: Mathematica Crash-Kurs · Einleitung Zielsetzung Mathematica ist wahrscheinlich das größte Programm, das Sie derzeit benutzen. Es besteht aus über 1800 Grundbefe-hlen und aus einer

Sodann werden alle Befehle, die dem Anwender zur Verfügung gestellt werden sollen, deklariert. Nehmen wir an die Befehle lauten MyFirstCommand und MySecondCommand.

MyFirstCommand::usage = "Dies ist mein 1. Befehl !"

MySecondCommand::usage = "Dies ist mein 2. Befehl. Er kann ..."

Wie man sieht, kann bei der Deklaration der Befehle ein OnLine-Text angegeben werden.

Nachdem das Benutzer-Interface implementiert worden ist, wird eine lokale Variablenumgebung hergestellt. Alles was nun folgt ist für den Anwender, der das Package Seminar` einlädt, unsichtbar.

Begin @"`Private`" DIn diesem Teil eines Packages kann nach belieben programmiert werden. Außer den im Interface mittels usage deklarierten Befehlen dringt nichts nach außen und auch nichts nach innen.

Das Ende eines Packages wird durch folgende Kommandos festgelegt.

End@ DEndPackage @ D

Die im AddOns-Verzeichnis niedergelegten StandardPackages können als Vorlage dienen.

Fazit

Dieser Crash-Kurs vermag die Grundzüge der Mathematica-Grammatik zu vermitteln. Das Vokabular der Mathematica-Befehle kann jedoch nur durch täglichen Umgang mit dem Programm erarbeitet werden. Übung macht den Meister!

Bei den alltäglichen Problemen helfen folgende Adressen:

Wolfram Research Webseiten:

http : www. wolfram . comhttp : www. wolfram . co. ukhttp : www. wolfram . co. jp

Mathematica User Group:

http : library . wolfram .com mathgroup Happy Computing!

30 MmaCrashKurs.nb