Mathematica Crash-Kurs - Eine kompakte und systematische Einführung für Anfänger und Fortgeschrittene

Die Seite wird erstellt Kjell Horn
 
WEITER LESEN
Mathematica Crash-Kurs - Eine kompakte und systematische Einführung für Anfänger und Fortgeschrittene
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.
2                                                                                                         MmaCrashKurs.nb

    Einleitung

       Zielsetzung
    Mathematica 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.

       Vorgehensweise
    In 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.
MmaCrashKurs.nb                                                                                                            3

    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 Rasa
 Bevor 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!
4                                                                                                        MmaCrashKurs.nb

    Mathematica Listenstrukturen

       Listenkonzept
    Alle 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@yD
                        €€€€€
                        3

    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"]
MmaCrashKurs.nb                                                                                                         5

                  Cell[BoxData[\(4\)], "Output"]
                  },
                  Open
              ]
       ]},
       FrontEndVersion->"Macintosh 3.0",
       ScreenRectangle->{{0, 1024}, {0, 748}},
       WindowSize->{511, 259},
       WindowMargins->{{36, Automatic}, {Automatic, 58}}
 ]

     Atomare Datentypen
 Offensichtlich 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@1999D
          Integer

          IntegerQ@1999D

          True

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

    Beispiele:

    Ein gigantischer Binomialkoeffizient

             Binomial@1999, 1900D
             5480307429468978819502484902052030669259099763711602614435120655666146437 „
              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
               7
             €€€€€€€
              24

             9  24
              3
             €€€€
              8

    à 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  4D

             Rational

             AtomQ@3  4D

             True

    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:
MmaCrashKurs.nb                                                                                                      7

          H2  3 - 4  5L ^ 2
             4
          €€€€€€€€€€
           225

          Sqrt@2 - 2  9D
           4
          €€€€
           3

          Sqrt@2 - 2  7D

               3
          2 $%%%%%%
              €€€€
               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.

          Head@2.98 10 ^ 8D
          Real

 Zum Vergleich: die Eins als Gleitkommazahl

          Head@1.D

          Real

 und die Eins als ganze Zahl.

          Head@1D

          Integer

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

    à 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@Π, 100D
                3.14159265358979323846264338327950288419716939937510582097494459230781640 „
                 6286208998628034825342117068

                N@2 Π, 100D

                6.28318530717958647692528676655900576839433879875021164194988918461563281 „
                 2572417997256069650684234136

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

                N@2.0 Π, 100D

                6.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
                       3I
                2.1 - €€€€€€€€
                        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.
MmaCrashKurs.nb                                                                                                     9

 Beispiel:

             Head@1 - 3.14 ID

             Complex

 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 - äL
              2      16 I
             €€€€ + €€€€€€€€€€€
              5         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."D

             String
10                                                                                                 MmaCrashKurs.nb

          StringQ@"Ich weiß von nichts!"D

          True

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

          ? String*

              String                  StringPosition
              StringBreak             StringQ
              StringByteCount         StringReplace
              StringDrop              StringReplacePart
              StringForm              StringReverse
              StringInsert            StringSkeleton
              StringJoin              StringTake
              StringLength            StringToStream
              StringMatchQ

     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@ΠD

          Symbol

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

          ?N

              N@ausdrD ergibt den numerischen Wert von ausdr.
              N@ausdr, nD versucht, ein
                Ergebnis mit n-stelliger Präzision anzugeben.
MmaCrashKurs.nb                                                                                                      11

             N@Pi, 50D

             3.1415926535897932384626433832795028841971693993751

 Das Symbol Sin dient als Name einer Funktion.

             Head@SinD
             Symbol

             Sin@Pi  3D
              !!!
                  3
             €€€€€€€€€
                2

 Das Symbol Expand dient als Name eines Mathematica-Kommandos.

             Head@ExpandD

             Symbol

             Expand@Hx - 1L3 D

             -1 + 3 x - 3 x2 + x3

    Listensemantik
 Wie 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]
12                                                                                                 MmaCrashKurs.nb

 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 + hD

 Nicht-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,
                az + by - cx + dw
              D

 à 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, 1D

 Skalarprodukt (im Englischen: dot product) zweier 3-dimensionaler Vektoren:

          Dot@List@a, b, cD, List@x, y, zDD

 Integration der Funktion sin2 HxL mit der Integrationsvariablen x:

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

     Listendarstellung
 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.
MmaCrashKurs.nb                                                                                                  13

 Beispiele:

             a+b                        ® Plus@a, bD

               81, 2, 3< ® List@1, 2, 3D

               exprPiT                       ® Part@expr, iD

               à f@xD â x ® Integrate@f@xD, xD

 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 xDD  x ^ 2, xD

 StandardForm:
                Abs@Sin@2 xDD
                             €€€€€€€€€€€€€€€€€€€€€ â x
             à €€€€€€€€€€€€€€€€
                             x2

 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 xDD  x ^ 2D
         Abs(Sin(2*x))/Power(x,2)

 Typesettingsystem TeX

             TeXForm@Integrate@Abs@Sin@2 xDD  x ^ 2, xDD
         \int \frac{\Mfunction{Abs}(\sin (2\,x))}{{\Mfunction{x}}^2}\,dx

 Mathematica Verarbeitungsmechanismen

    Anwendung Eingebauter Befehle
 Viele 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.
14                                                                                                 MmaCrashKurs.nb

     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:
MmaCrashKurs.nb                                                                                                     15

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

             ? BesselJ

              BesselJ@n, zD gives the Bessel function of the first kind JHn, zL.

                             ä
             BesselJA2, 3 - €€€€ E  N
                             2
             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 yD, 8x, -2, 2
16                                                                                                 MmaCrashKurs.nb

             Options@Plot3DD

             8AmbientLight ® GrayLevel@0D, AspectRatio ® Automatic, Axes ® True,
              AxesEdge ® Automatic, AxesLabel ® None, AxesStyle ® Automatic,
              Background ® Automatic, Boxed ® True, BoxRatios ® 81, 1, 0.4
MmaCrashKurs.nb                                                                                                        17

    Umbau von Listen
 Eine 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
18                                                                                                  MmaCrashKurs.nb

             ? Level

             ? Delete

             ? Insert

             ? ReplacePart

     Ersetzungsregeln
 Es 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 und
                versucht so jeden Teil des Ausdrucks ausdr zu transformieren.

         ?ReplaceRepeated

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

             fib@5D . 8fib@0D ® 1, fib@n_D ® n fib@n - 1D<

             5 fib@4D

             fib@5D . 8fib@0D ® 1, fib@n_D ® n fib@n - 1D<

             120
MmaCrashKurs.nb                                                                                                     19

    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@aD
                  !!!
                      3
             1 - €€€€€€€€€
                    2

 egal ob gewollt oder ungewollt.

             Expand@H1 - aL3 D

                      Π2        Π3
             1 - Π + €€€€€€€ - €€€€€€€
                       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:
20                                                                                                MmaCrashKurs.nb

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

          Clear@a, bD

 Fall 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, cD

 Angenommen 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,
MmaCrashKurs.nb                                                                                                       21

             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 = Random@D
             0.430789

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

             Do@Print@aD, 83
22                                                                                             MmaCrashKurs.nb

 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 * MeterL  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 ^ 2D

           8.98755 ´ 1016 Meter2
          €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
                                       €€€€€€€€€€€€€€€€€€€€€€
                         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, formD = ausdr
             Format@symb, formD := ausdr

 à DownValue-Zuweisung
 Ersetzungregel für Funktionen, Operationen und Datentypen mit dem Listenkopf symb.
MmaCrashKurs.nb                                                                                                         23

            symb@ausdr1D = ausdr2
            symb@ausdr1D := 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

    Mustererkennung
 Im 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 Namen x für einen beliebigen Ausdruck
                            x:pattern     ein Muster mit dem Namen x
                         pattern ? test   ein Muster, das paßt, wenn der test True ergibt
                                    _h    ein Muster für einen beliebigen Ausdruck mit Kopf h
                                  x_h     ein Muster mit Namen x für für einen beliebigen Ausdruck mit Kopf h
                                    __    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 Namen x für eine Folge von Ausdrücken
                       __h und ___h       ein Muster für eine Folge von Ausdrücken mit Kopf h
                     x__h und x___h       ein Muster mit Namen x für eine Folge von Ausdrücken mit Kopf h
                                 x_:v     ein Muster mit dem Vorgabewert v
                                x_h:v     ein Muster mit dem Vorgabewert v für einen Ausdruck mit Kopf h
                                  x_.     ein Muster mit einem globale definierten Vorgabewert
                    Optional@x_hD         ein Muster mit einem globale definierten Vorgabewert für einen Ausdruck mit K
                             muster..     ein Muster, das ein - oder mehrmals wiederholt wird
                           muster...      ein Muster, das kein oder mehrmals auftritt
              muster1 È muster2 È …       ein Muster, das mindestens mit einem der musteri übereinstimmen muß
                       muster ; cond     ein Muster, das paßt, wenn die Bedingung cond True ergibt
              HoldPattern@musterD         ein nicht evaluiertes Muster
                  Verbatim@ausdrD         ein Ausdruck, der wortwörtlich passen muß
24                                                                                                   MmaCrashKurs.nb

 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 + SchnapsD

              Diese 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, 40D

              Es steht 30 zu 40!

          TennisFunktion@40, 40D

              Einstand!

 Muster könne auf einen beliebigen Datentyp geeicht werden.

          PrimfaktorZerlegung@n_IntegerD := FactorInteger@nD;

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

          RationalQ@Hx_Integer È x_RationalLD := 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  cD

          log@Times@x_, y_DD := log@xD + log@yD;
          log@Power@x_, n_DD := n log@xD

          log@3 a b ^ 2  cD

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

 Beispiele:
MmaCrashKurs.nb                                                                                                   25

          Sin@80, Π  5, Π  3, Π  2, Π
26                                                                                                    MmaCrashKurs.nb

        Regelbasierte Sprachen (Prolog, Lisp)

        Funktionale Sprachen (APL, Excel)

 Dementsprechend werden wir hier vorgehen.

     Prozedurale Programmierung
 Der 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_IntegerD :=
              Block@
               8dummy, fib0 = 1, fib1 = 1< H*Initialisierung lokaler Variablen*L, Do@
                dummy = fib0;     H*Rekursion:*L
                fib0 = fib1;      H*fib@nD=fib@n-1D+fib@n-2D*L
                fib1 += dummy,
                8n - 2<
               D;
               Return@fib1D        H*Ausgabe des Ergebnisses*L
              D;

             Table@FibonacciZahl@iD, 8i, 10
MmaCrashKurs.nb                                                                                                     27

          Clear@MyDiffD

 Konstantenregel:

          MyDiff@c_, var_D := 0 ; FreeQ@c, varD

 Potenzregel (mit Kettenregel):

          MyDiff@var_, var_D := 1;

          MyDiff@expr_ ^ n_, var_D :=
           n expr ^ Hn - 1L * MyDiff@expr, varD ; FreeQ@n, varD

 Summenregel:

          MyDiff@f_ + g_, var_D := MyDiff@f, varD + MyDiff@g, varD

 Produktregel:

          MyDiff@f_ g_, var_D := MyDiff@f, varD g + f MyDiff@g, varD

 Diese vier Differentiationsregeln genügen bereits, um alle Polynome mit einer Variable zu differenzieren

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

          -a + 6 x

          MyDiff@Ha - xL ^ 2  x, xD

             Ha - xL2             2 Ha - xL
          - €€€€€€€€€€€€€€€€
                          €€€€ - €€€€€€€€€€€€€€€€€€€€€€
                   x2                    x

    Funktionale Programmiergung
 Das 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@LogD

          8Listable, NumericFunction, Protected<

          Log@81, 2, 3, 4, 5
28                                                                                                    MmaCrashKurs.nb

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

             Map@f, 81, 2, 3
MmaCrashKurs.nb                                                                                         29

 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`"D

 Hiernach werden, falls erfoderlich, andere Packages hinzugeladen.

          Needs@"PackageXY`"D
30                                                                                                MmaCrashKurs.nb

 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`"D

 In 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@ D
         EndPackage@ 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.com
         http :  www.wolfram.co.uk
         http :  www.wolfram.co.jp

 Mathematica User Group:

         http :  library.wolfram.com  mathgroup 

 Happy Computing!
Sie können auch lesen