eXamen.press eXamen.press isteineReihe, dieTheorieund Praxis aus allen Bereichen der Informatikfür dieHochschulausbildungvermittelt. Axel Kilian Programmieren mit Wolfram Mathematica® 123 Prof.Dr.AxelKilian FBInformatikundKommunikationssysteme HochschuleMerseburg GeusaerStr.88 06217Merseburg [email protected] ZusätzlichesMaterialzudiesemBuchkannvonhttp://extra.springer.comheruntergeladenwerden. ISSN1614-5216 ISBN978-3-642-04671-1 e-ISBN978-3-642-04672-8 DOI10.1007/978-3-642-04672-8 SpringerHeidelbergDordrechtLondonNewYork DieDeutscheNationalbibliothek verzeichnet diesePublikation inderDeutschenNationalbibliografie; detailliertebibliografischeDatensindimInternetüberhttp://dnb.d-nb.deabrufbar. Mathematica®isaregisteredtrademarkofWolframResearch,Inc. ©Springer-VerlagBerlinHeidelberg2010 DiesesWerkisturheberrechtlichgeschützt.DiedadurchbegründetenRechte,insbesonderediederÜber- setzung,desNachdrucks,desVortrags,derEntnahmevonAbbildungenundTabellen,derFunksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen Wegen und der Speicherung in Daten- verarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Verviel- fältigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Gren- zen dergesetzlichen Bestimmungen des Urheberrechtsgesetzes derBundesrepublik Deutschland vom 9.September1965inderjeweilsgeltendenFassungzulässig.Sieistgrundsätzlichvergütungspflichtig. ZuwiderhandlungenunterliegendenStrafbestimmungendesUrheberrechtsgesetzes. DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungen usw.indiesemWerkbe- rechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolcheNamenimSinneder Warenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachtenwärenunddahervonjedermann benutztwerdendürften. Einbandentwurf:KünkelLopka,Heidelberg Gedrucktaufsa¨urefreiemPapier SpringeristTeilderFachverlagsgruppeSpringerScience+BusinessMedia(www.springer.com) Vorwort Als ich mich entschloss, dieses Buch zu schreiben, wusste ich, dass eines besonders wichtig sein würde: klarzumachen, dass es hier um mehr ging als nur um eine wei- tere Programmiersprache. Ich selbst habe im Laufe meines Berufslebens eine Reihe von Programmiersprachen bzw. auch Skriptsprachen erlernt oder wenigstens ken- nen gelernt, und es bräuchte sehr gute Argumente, mich zu einer weiteren zu über- reden. Bis vor wenigen Jahren habe ich noch einen Teil meiner Aufgaben mit C++ Programmen gelöst, heute benutze ich ausschließlich Mathematica®. Es ist einfach bequemer. Es macht auch mehr Spaß, und ich habe nie zuvor so effizient gearbeitet wie heute. Ich wünsche mir, dass sich durch dieses Buch meine Begeisterung auf Sie über- trägt. Je nach Ihrem Vorwissen kann das ein kurzer oder ein langer Weg sein, auf jeden Fall wird er interessant. Fast jeder kennt Mathematica, aber manch einer denkt immer noch, es sei so etwas wie ein besserer Taschenrechner, der auch schöne Bilder produzieren kann. Im Kern ist Mathematica jedoch eine Programmiersprache. Da die Anwender selten Informatiker sind, sondern zumeist Naturwissenschaftler oder Ingenieure, werden konsequent alle Irrwege aus der Geschichte der Softwareentwicklung wiederholt: Die Anwender erlernen die Sprachelemente, wenden sie oft auch virtuos an, und schreiben Code, der genial ist, nur leider nicht verständlich. Als Mathematica-Benutzer der ersten Stunde habe ich in nunmehr über zwanzig Jahren selbstverständlich all die Fehler gemacht, die Sie, liebe Leser, infolge der Lektüre dieses Buches erfolgreich umschiffen werden. Möge dieses Buch Ihnen nicht nur eine wertvolle Hilfe bei Ihrem Studium oder Ihrer Arbeit sein, sondern Sie auch unterhalten und erfreuen. Und wenn es dazu bei- trägt, dass der eine oder andere, der das Raumschiff Mathematica bisher nur zum Brötchen holen benutzt hat, nun weitere Reisen wagt, hat es seinen Zweck erfüllt. Folgenden Personen und Institutionen schulde ich Dank: der Hochschule Merse- burg dafür, mich für dieses Projekt freizustellen. Nur so konnte das Buch einiger- maßen zeitnah zur Mathematica-Version 7 fertiggestellt werden; Herrn Prof. Dr. Bernhard Bundschuh, der mich zu diesem Projekt ermutigte und das Manuskript V VI Vorwort sorgfältig durchsah; Herrn Prof. Dr. Jörg Scheffler für seine Anmerkungen zum Thema „Hochspannungsleitung“; Herrn Prof. Dr. Horst-Herbert Krause und Dipl.- Ing. René Stöhr für das Material zum Kapitel „Fahrzeugsimulation“. Last not least danke ich auch Frau Prof. Dr. Beate Jung dafür, mich im Sommersemester 2009 zu vertreten. Berlin, im Juli 2009 Axel Kilian Inhaltsverzeichnis Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V Inhaltsverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VII 1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Über dieses Buch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Was ist ein Computeralgebra-System? . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Was genau ist Mathematica?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4 Erste Schritte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.5 Das Hilfe-System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2 Die Struktur von Mathematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1 Gewaltenteilung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2 Das Notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.3 Die Sprache Mathematica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.4 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.5 Wolframs Datensammlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3 Programmieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 3.1 Programmierparadigmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 3.2 Viele Wege führen nach Rom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.3 Programmierrichtlinien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 3.4 Verschiedene Ausreden schlechten Code zu schreiben . . . . . . . . . 78 3.5 Guter und schlechter Code an einem Beispiel. . . . . . . . . . . . . . . . . 79 3.6 Graphische Benutzeroberflächen . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4 Praxis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.1 Grundlegende Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.2 Beispiele nach Themen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.3 Beispiele im Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 4.4 Performance-Optimierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 4.5 Wie kann ich ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 VII VIII Inhaltsverzeichnis Glossar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Referenzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Sachverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Kapitel 1 Einführung 1.1 Über dieses Buch Die Software Mathematica von Wolfram Research, Inc. (im Folgenden als WRI bezeichnet) ist Computeralgebra-System (CAS), Programmiersprache, Benutzero- berfläche und Entwicklungsumgebung in einem. Spätestens seit der Anfang 2008 erschienenen Version 6 ist Mathematica wohl das zurzeit mächtigste CAS. Es erfreut sich wachsender Beliebtheit bei seinen Nutzern, zu denen nicht allein Mathe- matiker gehören, sondern ebenso Ingenieure und Naturwissenschaftler aller Fach- richtungen. Dieses Buch bezieht sich auf die im Dezember 2008 erschienene Mathematica Version 7. Sie können es aber ebenso für die Version 6 benutzen, von Version 6 zu 7 gab es keine grundlegenden Änderungen, es kamen lediglich einige nützliche Funktionen hinzu. Für frühere Versionen ist das Buch nur eingeschränkt verwend- bar, da mit der Version 6 eine weitgehend neue Benutzeroberfläche erschien. Besonders ausführlich werden die neu hinzugekommenen Möglichkeiten behan- delt. Das sind die mit Version 6 eingeführte Interaktivität und die seit der Version 7 vorhandene Möglichkeit, zeitintensive Berechnungen auf mehrere Prozessoren zu verteilen. Definitiv nicht beabsichtigt ist, die vermeintliche Lücke der fehlenden gedruck- ten Dokumentation zu füllen. Die Online-Dokumentation in diesen Versionen ist durch ihre verlinkte Struktur, die überaus zahlreichen interaktiven Beispiele und die Suchfunktionen jedem konventionellen Buch so hoffnungslos überlegen, dass dies aus meiner Sicht absolut keinen Sinn ergäbe. Vielmehr setzt dieses Buch darauf auf. Angesprochen sind alle Benutzer von Mathematica, vom absoluten Neuling bis zum Fastprofi. Der Neuling macht schnell die ersten Schritte und lernt vor allem erst einmal, die eingebaute Hilfe und Dokumentation effizient zu nutzen. Dem Fortge- schrittenen helfen die prototypischen Beispiele und vor allem auch eine umfangrei- che Sammlung elementarer Tricks und Kniffe, die manchmal gar nicht so elementar sind, siehe Kap. 4.5 Wie kann ich .... Mit etwas Glück findet man hier direkt die 1 2 1 Einführung Lösung seines Problems, inklusive der Erklärung wie es funktioniert und warum es so und nicht anders gemacht wurde. Auch die Experten kommen auf ihre Kosten. Es werden nicht einfach nur Rezepte geliefert, sondern vor allem Konzepte und Techniken zur Behandlung kom- plexerer Aufgabenstellungen. Zwar bringt Mathematica für viele einschlägige Gebiete fertige Lösungen in Form eines einzigen Funktionsaufrufs mit. Doch so mächtig und zahlreich die mitgelieferten Befehle und Beispiele auch sind, es wird immer Herausforderungen geben, die sich nicht mit wenigen Zeilen Code erledigen lassen. Spätestens dann ist eine gewisse Technik nötig, um die eigenen Programme sicher, verständlich und pflegeleicht zu machen. Dies ist einer der Schwerpunkte dieses Buches. Den zweiten Schwerpunkt bilden die Programmierbeispiele. Der Leser lernt ganz nebenbei Lösungen konkreter Probleme kennen, etwa wie man deutsche Excel Tabellen importiert (aus dem Komma muss ein Dezimalpunkt werden), wie man den Durchhang eines Seils berechnet, wie man ein berechnetes Bild mit definierter Kompressionsrate exportiert oder wie man die Präsentation vorberechneter Daten interaktiv optimiert. Jedes der Programmierbeispiele beginnt mit einer Beschrei- bung der Aufgabenstellung. Es folgt die Analyse, also das Zerlegen in Teilaufgaben, die Diskussion verschiedener Lösungsansätze und schließlich eine Implementie- rung im Sinne der in Kap. 3.3 Programmierrichtlinien beschriebenen Programmier- grundsätze. Der dritte Schwerpunkt sind die im Kap. 3.6 behandelten grafischen Benutzero- berflächen. Der große Erfolg gerade dieser relativ neuen Elemente zeigt, dass hier erkannt wurde, was die Nutzer wünschen, allerdings ist der Preis für die neue Funk- tionalität ein wesentlich komplexeres System. 1.1.1 Notation, Gestaltung und Konventionen • Mehrzeiliger Mathematica-Code wird 1:1 wiedergegeben, d.h., er sieht in die- sem Buch genau so aus wie auf dem Bildschirm. Beispiel: In[1]:= Integrate Sin ωt+φ ,t Cos φ Cos tω Sin φ Sin tω Out[1]= − + ω ω @ @ D D • Codefragmente im Text, ebenso wie Pfade oder Dateinamen, werden wie @ D @ D @ D @ D /usr/local/bin gezeigt. • Hervorhebungen und manche Namen, wie z.B. das Fenster About Wolfram Mathematica, werden kursiv wiedergegeben. • Anführungszeichen drücken aus, dass es sich um eine Metapher handelt, ich also sozusagen „in Anführungszeichen“ spreche. • Dezimalzahlen werden in Mathematica in angelsächsischer Notation, also mit Dezimalpunkt und nicht wie im Deutschen mit Komma, dargestellt. Im Sinne einer einheitlichen Darstellung benutze ich auch im Text diese Konvention.