Einführung in Mathematica

Ähnliche Dokumente
Funktionale Programmierung

Einführung in Mathematica

Einführung in die Programmierung II. 3. Kontrollstrukturen

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Programmierkurs Python I

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Java: Eine kurze Einführung an Beispielen

Schleifen: Immer wieder dasselbe tun

C++ - Einführung in die Programmiersprache Schleifen

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Vorkurs Informatik WiSe 16/17

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Bei der Und-Verknüpfung müssen beide Ausdrücke wahr sein, dass der gesamte Ausdruck wahr wird. a=1; b=2; a=1; b=3; else. endif

Einführung in die Programmierung II. 5. Zeiger

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Arbeitsblätter für Algorithmierung und Strukturierung

05 For-Schleifen. For-Schleifen 1/7 Was ist eine Schleife?

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Erwin Grüner

Softwarepraktikum. zu Elemente der Mathematik. Carsten Rezny Institut für angewandte Mathematik Universität Bonn

Einstieg in die Informatik mit Java

Linux und Shell-Programmierung Teil 6

m-files sind Folgen von MATLAB-Anweisungen oder Daten-Files.

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

Tag 2 Repetitorium Informatik (Java)

Webbasierte Programmierung

System.out.println("TEXT");

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Einführung Java Programmieren in Java Arrays Schleifen Fehler. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann

Anweisungen und Kontrollstrukturen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Anweisungen und Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen

Wo sind wir? Kontrollstrukturen

Kontrollstrukturen. Wo sind wir? Anweisung mit Label. Block. Beispiel. Deklarationsanweisung

Präzedenz von Operatoren

Javakurs für Anfänger

6. Iteration (Schleifenanweisungen)

C.3 Funktionen und Prozeduren

Klausur Grundlagen der Programmierung

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

2 Eine einfache Programmiersprache

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Algorithmen implementieren. Implementieren von Algorithmen

PROGRAMMIERUNG IN JAVA

Arbeitsblätter für Algorithmierung und Strukturierung C #

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

Übersicht Shell-Scripten

Elementare Konzepte von

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Einstieg in die Informatik mit Java

Schleifenanweisungen

Grundlagen der Programmierung

4.4 Imperative Algorithmen Prozeduren

Einführung in Perl. O'REILLY Beijing Cambridge Farnham Köln Sebastopol Taipei Tokyo. Randal L. Schwartz, Tom Phoenix & brian dfoy

2 Eine einfache Programmiersprache

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

Einführung in die Programmierung Wintersemester 2011/12

Objektorientierte Programmierung OOP Programmieren mit Java

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

6. Iteration (Schleifenanweisungen)

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Einstieg in die Informatik mit Java

Einführung in C. EDV1-04C-Einführung 1

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Programmieren für Wirtschaftswissenschaftler SS 2015

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Modellierung und Programmierung 1

4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

Bash-Skripting Linux-Kurs der Unix-AG

Schleifen in C/C++/Java

Programmierkurs Java

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Objektorientierte Programmierung

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Kontrollstrukturen: Wiederholungsanweisungen

3. Grundanweisungen in Java

Einführung Was ist und kann Mathematica?

Programmiervorkurs Einführung in Java Tag 3

AuD-Tafelübung T-B5b

Kapitel 1: Informationsverarbeitung durch Programme

Java I Vorlesung Imperatives Programmieren

Einstieg in die Informatik mit Java

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

3. Anweisungen und Kontrollstrukturen

Transkript:

Einführung in Mathematica Carsten Rezny Institut für Angewandte Mathematik Universität Bonn Pure Funktionen Das vorige Beispiel verwendet eine neue Schreibweise. Das erste Argument von Map oder Apply ist eine sogenannte pure Funktion (pure function) d.h. die Funktion selbst wird als Argument übergeben. Einstellige Funktionen kann man einfach durch ihren Namen angeben. Für mehrstellige Funktionen oder komplexere Ausdrücke gibt es den Funktionsoperator &. Der Operator & markiert einen vorangehenden Ausdruck als anonyme Funktion. Als Platzhalter für Funktionsargumente dienen # # # usw. Die anonyme Funktion kann natürlich gleich mit Argument verwendet werden. In[9]:= Out[9]= ð + &@5D 6 Auf diese Weise kann man auch benannte Funktionen definieren: In[93]:= p := ð ^ + ð ^ & In[9]:= p@3 D Out[9]= 5 Sinnvoll sind sie aber hauptsächlich im Zusammenhang mit Map Apply und Co. In[95]:= MapB & Range@0DF ð + Out[95]= : > 5 0 7 6 37 50 65 8 0 Mehr Listenverarbeitung Manchmal ist bei Map neben den Listenelementen auch deren Position in der Liste interessant. Dies bietet MapIndexed: In[96]:= Out[96]= MapIndexed@pp@ð ðd & 8 3 5 <D 8pp@ 8<D pp@3 8<D pp@5 83<D pp@ 8<D< Der Index des jeweiligen Elements wird dabei im zweiten Argument als einelementige Liste an die Funktion überreicht. Der Index selbst ist dann also #[[]]. Mit Nest wird eine Funktion iteriert. Zu der zu iterierenden Funktion wird ein Startwert und die Anzahl der Iterationen mitgegeben. In[97]:= Out[97]= NestAð & 5E 9 967 96 Wenn die Zwischenergebnisse interessant sind verwendet man NestList: In[98]:= Out[98]= NestListAð & 5E 8 6 56 65 536 9 967 96< Wenn statt der Anzahl der Iterationen ein Abbruchkriterium verwendet werden soll geht das mit NestWhile. In[99]:= NestWhileAð & ð > 0- &E Out[99]= 6 38

In[00]:= Out[00]= N@%D 0.00006035 Mit Select können Elemente einer Liste mit beliebigen Kriterien ausgewählt werden. In[0]:= Out[0]= In[0]:= Out[0]= liste = Sort RandomInteger@00 30D 8 9 0 6 8 5 33 35 5 6 7 8 5 56 56 59 67 68 69 70 7 78 80 8 87 88 00< Select@liste PrimeQD 87 59 67< Prozedurale Programmierung Neben der funktionalen Programmierung gibt es auch die Möglichkeit zur prozeduralen Programmierung wie sie aus Sprachen wie C Java oder Fortran bekannt ist. Sequenzen von Anweisungen Mathematica unterscheidet nicht zwischen Anweisungen und anderen Ausdrücken. Jede Anweisung kann als Teil eines Ausdrucks verwendet werden und jeder Ausdruck kann anstelle einer Anweisung stehen. In[03]:= Out[03]= + Ha = 7L 9 In[0]:= a Out[0]= 7 Die Zuweisung a=7 hat als Teil eines Ausdrucks den Wert 7. Wenn einem Ausdruck ein Semikolon folgt hat er statt seines normalen Wertes den Wert Null der nicht ausgegeben wird. Außerdem kann ein Semikolon als Trennzeichen zwischen Ausdrücken stehen. Eine solche mit Semikolons getrennte Folge von Ausdrücken hat den Wert des letzten Ausdrucks (sofern diesem kein Semikolon folgt). In[05]:= Out[05]= ; 3; Das ist insbesondere in den folgenden Kontrollstrukturen nützlich. Bei Bedarf kann eine Sequenz von Ausdrücken auch einfach in runde Klammern gesetzt werden: In[06]:= Out[06]= Hx = ; y = L + 3 5 Kommentare Kommentare ermöglichen es beliebigen Text an beliebigen Stellen in Ausdrücken unterzubringen z.b. für Dokumentationszwecke. Solche Kommentare werden in Mathematica mit (* und *) umschlossen. Sie werden wie Zwischenraum (Leerzeichen) behandelt. In[07]:= gg@x_ H* ein Argument *LD := Table@i 8i x H* i läuft von bis x *L<D Blöcke und Module Prozedurale Programmierung benötigt häufig lokale Variablen. Dafür stehen zwei Möglichkeiten zur Verfügung. Module erzeugt lexikalische lokale Variablen d.h. die Variablen existieren nur im Kontext des jeweiligen Module. (Das entspricht z.b. dem Verhalten von my in Perl.) Von dort aus aufgerufene Funktionen sehen diese lexikalischen Variablen nicht. In[08]:= a = 0; b = ;

In[09]:= Out[09]= 3 Module@8a = 5< a + bd 6 Intern werden die als lokal deklarierten Bezeichner durch temporäre Bezeichner ersetzt was bei undefinierten lokalen Variablen sichtbar wird. In[0]:= Out[0]= In[]:= Out[]= Module@8a< a + bd + a$76 f@x_d := a x Module@8a = 5< f@8dd 0 30 Im Unterschied dazu erzeugt Block dynamische lokale Variablen die auch für aufgerufene Funktionen sichtbar bleiben (analog zu local in Perl). In[3]:= Out[3]= In[]:= Out[]= In[5]:= Out[5]= Block@8a = 5< a + bd 6 Block@8a< a + bd Block@8a = 5< f@8dd 0 30 Kontrollstrukturen Ein weiteres wesentliches Element von prozeduraler Programmierung sind Kontrollstrukturen für Schleifen und bedingte Ausdrücke. Die einfachste Form einer Schleife ist Do: In[6]:= Do@k ^ 8k 0<D Do produziert von sich aus kein Resultat funktioniert ansonsten aber genau wie Table. In[7]:= Do@Print@k " " k ^ D 8k 0<D 3 9 6 5 5 6 36 7 9 8 6 9 8 0 00 Die For-Schleife ist analog zu dem in C oder Java vorhandenen for aufgebaut: In[8]:= For@k = k <= 0 k ++ Print@k " " k ^ DD

3 9 6 5 5 6 36 7 9 8 6 9 8 0 00 While wiederholt einen Ausdruck solange die gegebene Bedingung wahr ist. In[9]:= x = 0-5 ; While@x < x *= D; x 096 Out[9]= 35 If verhält sich in etwa wie der aus C oder Java bekannte ternäre Operator?: In[0]:= test@x_d := If@PrimeQ@xD "Primzahl" "keine Primzahl"D In[]:= test@8d Out[]= In[]:= Out[]= keine Primzahl test@7d Primzahl If kennt noch ein viertes Argument das ausgewertet wird wenn die Bedingung weder wahr noch falsch ist: In[3]:= kleiner@x_ y_d := If@x < y "kleiner" "nicht kleiner" "undefiniert"d In[]:= kleiner@ 3D Out[]= In[5]:= Out[5]= kleiner kleiner@5 zd kleiner Für eine Entscheidung unter mehreren Fällen gibt es Switch und Which. Ersteres ähnelt wieder stark seinem C-Pendant: In[6]:= wort@x_d := Switch@x "eins" "zwei" 3 "drei" _ "weiß nicht"d In[7]:= wort@3d Out[7]= In[8]:= Out[8]= drei wort@d weiß nicht Which verarbeitet eine Reihe von unabhängigen Test-Wert-Paaren. In[9]:= Out[9]= In[30]:= x = 0; y = ; z = ; Which@x "x" y "y" z "z"d y Clear@x y zd

Graphische Darstellung Mathematica verfügt über umfangreiche Möglichkeiten zur graphischen Darstellung. Ein einfacher Funktionsplot: In[3]:= PlotAx Sin@xD 8x 0 0<E 300 00 00 Out[3]= 5 0 5 0-00 -00-300 Mehrere Kurven in einem Plot: In[3]:= Plot@8x ^ x ^ 3< 8x - 5 5<D 0 0 Out[3]= - - -0 Es gibt sehr viele Plot-Optionen hier nur ein paar Beispiele: In[33]:= Plot@8x ^ x ^ 3< 8x - 5 5< PlotRange 8-5 5<D Out[33]= - - - - 5

6 In[3]:= PlotAExpA- x E 8x - 3 3< Filling AxisE.0 0.8 0.6 Out[3]= 0. 0. -3 - - 3 Auch Listen können geplottet werden: In[35]:= ListPlot@Prime@Range@50DD Filling AxisD 00 50 Out[35]= 00 50 0 0 30 0 50 Für Funktionen in zwei Variablen gibt es Plot3D: In[36]:= Plot3DASinAx + y E 8x - < 8y - <E.0 0.5 Out[36]= 0.0-0.5 -.0 0 - - - 0 -