Einführung in die wissenschaftliche Programmierung - Winter 09
- Term
- Winter 09
- Lecturer
- Dr. rer. nat. Stefan Zimmer
- Time and Place
- Vorlesung: Montags, 10:15-11:45, MI HS1
- Beginn: Damit sich alle SET-Tutoren um die SET kümmern können, ist in der ersten Semesterwoche noch kein WiPro, die Veranstaltung beginnt also mit der Vorlesung am 26.10.
- Audience
- Modul IN8008
- Pflichtfach im Studiengang Physik (Bachelor)
- Hörer anderer Fachrichtungen sind ebenfalls willkommen!
- Tutorials
- Zentralübung: Mittwochs 8:30-10:00, PH HS1
- Beginn am Mittwoch, 28.10.
- Exam
- Klausur am Semesterende: Freitag, 26.2.2010, 9:30-10:30 im Hörsaal MW0001
- Anmeldung zur Klausur bis 31.1. über TUMonline
- Hilfsmittel: als Hilfsmittel ist nur die Python-Gedächtnisstütze zugelassen, die zur Klausur verteilt wird und die die wichtigsten Sprachelemente aufführt.
- Vorläufige Version der Gedächtnisstütze. Update 2.2.: bei den Vergleichsoperatoren das
!=
eingefügt -- wer weitere Fehler findet, bitte Bescheid sagen :-) - Bei der Veranstaltung vom letzten Jahr kann man sich eine alte Klausur ansehen, um zu sehen, wie Klausuraufgaben bei mir so aussehen.
- Semesterwochenstunden / ECTS Credits
- 4 SWS / 4 Credits
- TUMonline
- {{{tumonline}}}
Einleitung (26./28.10.)
- Die Folien
Update 26.10.: Auf Folie 5 'Notepad' statt 'Wordpad'; Tippfehler beseitigt - Software
- Die offizielle Python-Website (mit Donwnload-Seite)
- Wer die IPython-Shell bnutzen möchte, findet die hier
- Dokumentation
- Online-Dokumentation
- Schriftenverkauf im LRZ (da gibt's das Python-Heft)
Kontrollstrukturen (2./4.11.)
- Die Folien
Update 2.11.:import math
undmath.exp
stattfrom math import exp
undexp
(ist auch in den Beispielprogrammen 1,3 und 4 unten geändert); Beispiele auf Folie 33 nachgezählt :-) - Die Programme aus der Vorlesung:
- logistisch1.py: Die Wertetabelle (Update 2.11., s.o.)
- logistisch2.py: Das Euler-Verfahren
- logistisch3.py: Das Euler-Verfahren mit Auswertung (Update 2.11., s.o.)
- logistisch4.py: Das Verfahren von Heun (Update 2.11., s.o., dieses Programm hatte bisher auch ein Einrückungsproblem, das ist nun behoben)
- Ein Vorschlag für die Selbermach-Aufgabe (Räuber-Beute-Modell): raeuberbeute.py
Anmerkung: ich bin in der Übung darauf aufmerksam gemacht worden, dass mein erster hier publizierte Versuch keine korrekte Implementierung des Euler-Verfahrens war (bei der Berechnung der Ableitung von q habe ich den neuen Wert von p verwendet). Dummerweise wird das Verfahren (eher "zufällig") dadurch wesentlich genauer - wer einen richtigen Euler (so wie in der aktuellen Fassung meines Programms) nimmt, muss deutlich meht Zeitschritte investieren als von mir vorgeschlagen: mindestens 100, besser viel mehr.
Noch eine Anmerkung: die bei mir implementierte Bestimmung eines Schnittpunkts zwischen zwei Zeitschritten dient beim Euler-Ferfahren nur als Programmierübung: Numerisch ist es sinnlos, weil der Fehler, mit dem man die Periodenlänge gegenüber der exakten Lösung falsch bestimmt, hier schon durch die Diskretisierung der DGL in der Größenordnung der Zeitschrittweite ist. Wenn man das Verfahren von Heun implementiert, hilft es für kleine Schrittweiten (weil der Diskretisierungsfehler hier schneller abnimmt als die Zeitschrittweite)
Funktionsdefinitionen (9./11.11.)
- Die Folien
Update 9.11.: Tippfehler auf Folie 46 entfernt, Programm auf Folie 58 ausgetauscht, in den Programmen auf Folien 57 und 59 den empfohlenenimport
-Mechanismus verwendet - Die Programme aus der Vorlesung:
- trapez.py: Trapezregel
- trapez2.py: Trapezregel mit Funktion als Parameter
- Ein Vorschlag für die Selbermach-Aufgabe (Simpson-Regel): simpson.py
In der Funktiontabelle
sieht man etwas, was ich bisher noch nicht erklärt hatte: mittels eines\
am Zeilenende kann man eine lange Progemmzeile auf mehrere Bildschirmzeilen aufteilen.
Daten in Python (16./18.11.)
- Die Folien
Update 3.11.: Tippfehler auf Folie 74 entfernt -a[1:1]
gibt()
Update 16.11.: auf Folie 77range(Start, Stop)
stattrange(Start:Stop)
- Ein Vorschlag für die Selbermach-Aufgabe (Auswertung für das Euler-Verfahren): euler_auswert.py
Ein Beispiel aus der Finanzmathematik (23./25.11.)
- Die Folien
- Das Programm binomial.py
- Ein Vorschlag für die Selbermach-Aufgabe: binomial_lsg.py
beispiel
erzeugt nun einen schöneren Ausdruck (hauptsächlich dankprintV
) und es gibt eine Funktionsimulation
mit Parametern wiebeispiel
, die einen Kursverlauf simuliert und die Anpassungen des Portfolios protokolliert.
Ein- und Ausgabe (30.11. - am 2.12. entfällt die Übung wegen Dies Academicus)
- Die Folien
- Die Programme aus der Vorlesung:
- test.py: Erstes Beispiel zum Schreiben und Lesen von Dateien
- mittelwert.py: Mittelwert berechnen (Beispieldatei mwtest.txt)
- teiler.py: Teilerlisten
- Ein Vorschlag für die Selbermachaufgabe: anwenden.py und eine Eingabedatei bsp.txt
- Eine Anmerkung: Dateien, wie sie in der Selbermachaufgabe vorkommen, eignen sich gut, um Diagramme aus unseren Daten zu ertellen, indem man z.B. Gnuplot verwendet. Wenn man Gnuplot in dem Verzeichnis gestartet hat, in dem eine Datei
bsp.txt
wie von Folie 121 rechts liegt, kann man in der Gnuplot-Konsole (nicht mit der Python- oder der normalen Shell verwechseln!) mit einem Kommando wieplot 'bsp.txt' with lines
die Zahlenpaare als Polygonzug zeichnen lassen.
Markov-Prozesse (7./9.12.)
- Die Folien
- Das Programm aus der Vorlesung: markov.py (Beispieldateien testzeile.txt für die Funktion
zeile_test()
und test.txt für die Funktioneinlesen()
) - Ein Vorschlag für die Selbermachaufgabe: markov_lsg.py
Anmerkung: dieses Nachzählen funktioniert nur dann richtig, wenn jeder Zustand von jedem anderen aus im weiteren Verlauf des Prozesses noch erreicht werden kann (solche Prozesse heißen irreduzibel, test.txt ist ein Beispiel dafür). Bei Prozessen wie "Würfeln und addieren", bei denen man nicht mehr zurückkommen kann, müsste man statt eines Siumlationslaufs mehrere mit zufälligen Anfangszuständen auszählen.
Aufräumarbeiten, Teil 1 (14./16.12.)
- Die Folien
- Die Programme aus der Vorlesung:
- markov.py, Beispieldatei programmieren.txt
- markov_ausnahmen.py
- Ein Vorschlag für die Selbermach-Aufgabe: markov_ausnahmen_lsg.py und Testdateien programmieren_L1.txt (überzähliger Doppelpunkt), programmieren_L2.txt (mehrfacher Eintrag), programmieren_L3.txt (Zeilensumme zu groß), programmieren_L4.txt (Zeilensumme zu klein), programmieren_L5.txt (nochmal Zeilensumme zu klein), programmieren_L6.txt (undefinierter Folgezustand)
Aufräumarbeiten, Teil 2 (21./23.12.)
- Die Folien
- Die Programme aus der Vorlesung:
- muster.py (Ein Modul)
- rekursion.py (Rekursive Funktionen)
- quadrate.py (Geschachtelte Funktionsdefinitionen)
- archimedes.py (Quadratur nach Archimedes)
- Ein Vorschlag für die Selbermachaufgabe: ggT.py
Objektorientierte Programmierung, Teil 1 (11./13.1.)
- Die Folien
- Die Programme aus der Vorlesung:
- Ein Vorschlag für die Selbermachaufgabe: polynom.py
Objektorientierte Programmierung, Teil 2 (18./20.1.)
- Die Folien
- Die Programme aus der Vorlesung:
- funktionen1.py (Basisversion der Klassen
Funktion
undPolynom
) - funktionen2.py (mit Addition)
- funktionen3.py (mit verbesserter Addition für Polynome)
- Update: in
Funktion.tabelle
muss esprint '%10.4f | %10.4f' % (a+h*i, self.wert(a+h*i))
heißen und nichtprint '%10.4f | %10.4f' % (h*i, self.wert(h*i))
- funktionen1.py (Basisversion der Klassen
- Ein Vorschlag für die Selbermachaufgabe: funktionen.py
Wärmeleitungsgleichung (25./27.1.)
- Die Folien
- Das Programm aus der Vorlesung: waermeleitung.py
- Pimp my Python:
- Gnuplot
- Das Paket Gnuplot.py, um Gnuplot direkt von Python aus benutzen zu können.
- Das Numerik-Paket NumPy
- Und schließlich SciTools (Einschließlich der Easyviz-Visualisierungstools)
- Anmeldung zur Klausur: bis 31.1. über TUMonline
- Ein Vorschlag für die Selbermachaufgabe: waermeleitung_lsg.py
Poisson-Gleichung (1./3. 2.)
- Die Folien
Update 1.2.: Auf Folie 240 in der Parameterliste des Konstruktors hat das I gefehlt, jetzt ist es da. - Das Programm aus der Vorlesung: poisson.py
Klausurtraining (8./11.2.)
- Die Folien
- Die Programme aus der Vorlesung:
- collatz1.py (Collatzfolge: Basisversion)
- collatz2.py (Collatzfolge: Funktionen)
- collatz3.py (Collatzfolge: Rekursion)
- listen1.py (Liste aufbauen)
- listen2.py (Funktionen mit Listen)
- stueckweise.py (Stückweise lineare Funktionen)