Physik auf dem Computer Wiederholung: Python, NumPy und C

Ähnliche Dokumente
Physik auf dem Computer Programmieren in Python

Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut

Computerphysik II. Python Einführung. S. Gerlach. WiSe S. Gerlach Computerphysik II

Minimaleinführung in Python 3

Computerphysik II. Python Einführung. S. Gerlach. WiSe S. Gerlach Computerphysik II

Computerphysik WS 2016/2017

Computergrundlagen Programmieren in Python

Computegrundlagen Programmieren in Python

Einführung in Python Teil II Bibliotheken für wissenschaftliches Rechnen

Python Workshop i. Python Workshop

Informatik I. 27. Wissenschaftliches Rechnen mit numpy, scipy und matplotlib Albert-Ludwigs-Universität Freiburg.

Einführung in numerische Simulation mit Python

Computerphysik WS 2014/2015

Computergrundlagen Programmieren lernen in Python

1 Berechnung von Summen (ca = 10 Punkte)

Informatik I. Informatik I Motivation Installation Das Modul numpy Funktionswerte zeich nen) 27.1 Motivation.

Mathematische Computer-Software

Algorithmik und Programmieren

Computergrafik 2: Übung 1. Eclipse, PyDev, NumPy, Matplotlib

Crashkurs Python und Sage U23 Krypto-Mission

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

1 Eine Einführung in die objektorientierte Programmierung

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

image.png Die Dokumentation von Python, welche ich so sehr empfehle, findet ihr hier:

Funktionen. Theorie. Inhaltsverzeichnis. Programmieren mit Python Modul 4. 1 Modulübersicht 3

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

Teil XI. Wissenschaftliches Rechnen in Python

Python. und statistische Methoden der Datenanalyse

Beispiellösung zu Aufgabe 10.3c)

MATLAB-Tutorium WS18 Nathalie Marion Frieß

Programming 101. Carl Herrmann IPMB & DKFZ

Algorithmen und Programmieren II Einführung in Python (Teil 2)

WS2018/ Oktober 2018

Teil XII. Wissenschaftliches Rechnen in Python

Numerik-Programm, mittlerweile mit vielen Erweiterungen (Toolboxen) Matlab = Matrix Laboratory Sehr gute Doku (doc, help, lookfor)

Teil XII. Wissenschaftliches Rechnen in Python

Multimedia Programmierung mit Python

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Algorithmen und Datenstrukturen (für ET/IT)

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Python als praktischer Helfer

Einführung in Python Teil I Grundlagen

Musterlösungen Blatt Mathematischer Vorkurs. Sommersemester Dr. O. Zobay. Matrizen

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Bru ckenkurs Programmieren

SFZPy Sj. 17/18. Python Jupyter / Spyder. SFZ 16/17 W.Seyboldt

Informatik I: Einführung in die Programmierung

Übungszettel 2a - Python

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

1 12. Vorlesung: Singulärwertzerlegung,

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.

Programmierkurs Python I

Python Intro. Vorsemesterkurs Informatik Praktischer Teil WS2012/13. 2.Oktober Vorkurs Informatik - WS 2012/13

Quick-Start Informatik Programmieren in Python Teil 2

Computergrundlagen Programmieren lernen in Python

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Bioinformatik für Biochemiker

Informatik. Wiederholung Felder (Arrays), string. Vorlesung

Python Intro I. Vorsemesterkurs Informatik Praktischer Teil WS 2013/14. 1.Oktober Vorkurs Informatik - WS 2013/14

Programmierkurs Python I

Einführung in die Computerlinguistik

Bash-Skripting Linux-Kurs der Unix-AG

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

D-MATH Numerische Methoden FS 2019 Dr. Vasile Gradinaru Marco Petrella. Serie 1

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

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

MATLAB Sommersemester 2018 Dr. Ulf Mäder

Gültigkeitsbereich. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/

PPS "Bits on Air" 1. Teil, Matlab-Tutorial Vorbereitungsaufgaben (Lösungsvorschläge)

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

WS2017/ Oktober 2017

Quick-Start Informatik Programmieren in Python Teil 1

In den USA verwendet man statt dessen eckige Klammern, was sich in der Software niederschlägt (mit Ausnahmen wie Wolfram Alpha):

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

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Inhalt. Mathematik für Chemiker II Lineare Algebra. Vorlesung im Sommersemester Kurt Frischmuth. Rostock, April Juli 2015

Matrizen. Jörn Loviscach. Versionsstand: 12. April 2010, 19:00 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung.

WS2018/ Oktober 2018

Transkript:

Physik auf dem Computer Wiederholung: Python, NumPy und C Axel Arnold Olaf Lenz Institut für Computerphysik Universität Stuttgart Sommersemester 2012

Python Wiederholung der wichtigsten Eckpunkte interpretierte Programmiersprache aktuelle Versionen 3.2 bzw. 2.7.2 (CIP-Pool: 2.6) Hilfe zu Python Homepage: http://www.python.org A Byte of Python : http://abop-german.berlios.de Dive into Python : http://diveintopython.net A. Arnold, O. Lenz Physik auf dem Computer 2/30

Python starten #!/usr/bin/python print "Hello World" Skript mit python helloworld.py starten oder Skript ausführbar machen (chmod a+x helloworld.py) OS erkennt an #! (shebang) in erster Zeile, welcher Interpreter benutzt werden soll Python interaktiv mit ipython (Tab-Vervollständigung, History,... ) A. Arnold, O. Lenz Physik auf dem Computer 3/30

Syntax #!/usr/bin/python # Eine sinnlose Bedingung if 1!= 1: pass else: print "Hello World" Umlaute vermeiden oder Encoding-Cookie einfügen Kommentare mit # Alle gleich eingerückten Zeilen gehören zum selben Block Ein : am Ende der vorigen Zeile beginnt den neuen Block pass macht nix A. Arnold, O. Lenz Physik auf dem Computer 4/30

Zahlen, Zeichenketten, Vergleiche, Variablen >>> print -12345-12345 >>> print 13.8E-24 1.38e-23 >>> print "Hello World" Hello World >>> print Hello World Hello World >>> print """Hello... World""" Hello World >>> print 1 == 2 or 1!= 2 True >>> print 1 < 2 and not 1 > 2 True >>> print 1 == 1 False >>> number1 = 1 >>> number2 = number1 + 5 >>> print number1, number2 1 6 >>> number2 = "Keine Zahl" >>> print number2 Keine Zahl A. Arnold, O. Lenz Physik auf dem Computer 5/30

Arithmetische Ausdrücke, Bedingungen, Schleifen >>> print ((1.+2.)*3./4.)**5. 57.6650390625 >>> print 1 + 2 12 >>> print 1/2, 1%2 0 1 >>> print 1./2 0.5 if a < 3: print "a < 3" elif a > 7: print "a > 7" else: print "3 < a < 7" i = 1 while i < 10: if i % 7 == 0: break if i % 3 == 0: continue print i i += 1 # Ausgabe: 1 2 4 5 6 >>> for s in ["Axel", "Olaf"]:... print "Hello", s... Hello Axel Hello Olaf A. Arnold, O. Lenz Physik auf dem Computer 6/30

Funktionen def max2(a, b): if a > b: return a else: return b pi = 3.14159 def circle_area(r): return pi*r**2 def max(*seq): maxv = seq[0] for v in seq: if v > maxv: maxv = v return maxv mymax = max(1, 22, 5, 8, 5) >>> def lj(r, epsilon = 1.0, sigma = 1.0):... return 4*epsilon*( (sigma/r)**6 - (sigma/r)**12 ) >>> print lj(2**(1./6.)) 1.0 >>> print lj(2**(1./6.), 1, 1) 1.0 >>> print lj(epsilon=1.0, sigma = 1.0, r = 2.0) 0.0615234375 A. Arnold, O. Lenz Physik auf dem Computer 7/30

Dokumentation, Funktionen als Werte, Rekursion def print_f(f, seq): """Berechnet Funktion f fuer alle Elemente von seq und gibt sie aus.""" for v in seq: print v, f(v) def myfunc(x): return x*x print_f(myfunc, range(10)) def fib(a): if a <= 1: return 1 else: return fib(a-2) + fib(a-1) A. Arnold, O. Lenz Physik auf dem Computer 8/30

Listen >>> mylist = ["Olaf", "Axel", "Floh"] >>> mylist[0] Olaf >>> mylist + ["Dominic"] [ Olaf, Axel, Floh, Dominic ] >>> mylist[1:3] [ Axel, Floh ] >>> mylist.append( Dominic ) >>> mylist [ Olaf, Axel, Floh, Dominic ] >>> del mylist[-1] >>> mylist [ Olaf, Axel, Floh ] >>> len(mylist) 3 A. Arnold, O. Lenz Physik auf dem Computer 9/30

Tupel, Flache und tiefe Kopien >>> kaufen = ("Muesli", "Kaese", "Milch") >>> print kaufen[1] Kaese >>> for f in kaufen[:2]: print f Muesli Kaese >>> kaufen[1] = "Camembert" TypeError: tuple object does not support item assignment >>> print k + k ( Muesli, Kaese, Milch, Muesli, Kaese, Milch ) >>> list1 = [ 1, 2, 3 ] >>> list2 = list1 >>> del list1[-1] >>> list2 [1, 2] >>> list1 = [ 1, 2, 3 ] >>> list2 = list1[:] >>> del list1[-1] >>> list2 [1, 2, 3] A. Arnold, O. Lenz Physik auf dem Computer 10/30

Assoziative Listen: Dictionaries >>> de_en = { "Milch": "milk", "Mehl": "flour" } >>> de_en { Mehl : flour, Milch : milk } >>> de_en["oel"]="oil" >>> for de in de_en: print de, "=>", de_en[de] Mehl => flour Milch => milk Oel => oil >>> for de, en in de_en.iteritems():... print de, "=>", en Mehl => flour Milch => milk Oel => oil >>> if "Mehl" in de_en:... print "Kann \"Mehl\" uebersetzen" Kann "Mehl" uebersetzen A. Arnold, O. Lenz Physik auf dem Computer 11/30

Formatierte Ausgabe, Objekte >>> print "Integer %d %05d" % (42, 42) Integer 42 00042 >>> print "Fliesskomma %e %+8.4f %g" % (3.14, 3.14, 3.14) Fliesskomma 3.140000e+00 +3.1400 3.14 >>> print "Strings %s %10s" % ("Hallo", "Welt") Strings Hallo Welt >>> mylist = list() >>> mylist.append(2) >>> mylist.append(3) >>> mylist.append(1) >>> mylist.sort() >>> mylist [1, 2, 3] >>> "Hallo Welt!".find("Welt") 6 A. Arnold, O. Lenz Physik auf dem Computer 12/30

Ein-/Ausgabe: Dateien in Python eingabe = open("ein.txt") ausgabe = open("aus.txt", "w") nr = 0 ausgabe.write("datei %s mit Zeilennummern\n" % eingabe.name) for zeile in eingabe: nr += 1 ausgabe.write("%d: %s" % (nr, zeile)) ausgabe.close() A. Arnold, O. Lenz Physik auf dem Computer 13/30

Fehlermeldungen: raise def loesungen_der_quad_gln(a, b, c): "loest a x^2 + b x + c = 0" det = (0.5*b/a)**2 - c if det < 0: raise Exception("Es gibt keine Loesung!") return (-0.5*b/a + det**0.5, -0.5*b/a - det**0.5) try: loesungen_der_quad_gln(1,0,1) except: print "es gibt keine Loesung, versuch was anderes!" A. Arnold, O. Lenz Physik auf dem Computer 14/30

Module import random from math import sqrt, log, cos, pi def boxmueller(): """ liefert normalverteilte Zufallszahlen nach dem Box-Mueller-Verfahren """ r1, r2 = random.random(), random.random() return sqrt(-2*log(r1))*cos(2*pi*r2) A. Arnold, O. Lenz Physik auf dem Computer 15/30

Numerik mit Python numpy numpy ist ein Modul für effiziente numerische Rechnungen Baut auf n-dimensionalem Feld-Datentyp numpy.array auf Feste Größe und Form wie ein Tupel Alle Elemente vom selben (einfachen) Datentyp Aber sehr schneller Zugriff Viele Transformationen Bietet mathematische Grundoperationen Sortieren, Auswahl von Spalten, Zeilen usw. Eigenwerte, -vektoren, Diagonalisierung diskrete Fouriertransformation statistische Auswertung Zufallsgeneratoren Hilfe unter http://docs.scipy.org A. Arnold, O. Lenz Physik auf dem Computer 16/30

array eindimensionale Arrays >>> import numpy as np >>> print np.array([1.0, 2, 3]) array([ 1., 2., 3.]) >>> print np.ones(5) array([ 1., 1., 1., 1., 1.]) >>> print np.arange(2.2, 3, 0.2, dtype=float) array([ 2.2, 2.4, 2.6, 2.8]) np.array erzeugt ein Array (Feld) aus einer Liste np.arange entspricht range für beliebige Datentypen np.zeros/ones erzeugen 1er/0er-Arrays dtype setzt den Datentyp aller Elemente explizit bool Wahrheitswerte float IEEE-Fließkommazahlen int ganze Zahlen complex Komplexe Fließkommazahlen ansonsten der einfachste für alle Elemente passende Typ A. Arnold, O. Lenz Physik auf dem Computer 17/30

Mehrdimensionale Arrays >>> print np.array([[1, 2, 3], [4, 5, 6]]) array([[1, 2, 3], [4, 5, 6]]) >>> print np.array([[[1,2,3], [4,5,6]], [[7,8,9], [0,1,2]]]) array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [0, 1, 2]]]) >>> print np.zeros((2, 2)) array([[ 0., 0.], [ 0., 0.]]) Mehrdimensionale Arrays entsprechen verschachtelten Listen Alle Zeilen müssen die gleiche Länge haben np.zeros/ones: Größe als Tupel von Dimensionen A. Arnold, O. Lenz Physik auf dem Computer 18/30

Elementzugriff und Subarrays >>> a = np.array([[1,2,3,4,5,6], [7,8,9,0,1,2]]) >>> print a.shape, a[1,2], a[1] (2, 6) 9 [7 8 9 0 1 2] >>> print a[0,1::2] array([2, 4, 6]) >>> print a[1:,1:] array([[8, 9, 0, 1, 2]]) >>> print a[0, np.array([1,2,5])] array([2, 3, 6]) [] indiziert Elemente und Zeilen usw. Auch Bereiche wie bei Listen a.shape ist die aktuelle Form (Länge der Dimensionen) int-arrays, um beliebige Elemente zu selektieren A. Arnold, O. Lenz Physik auf dem Computer 19/30

Methoden: Matrixoperationen >>> a = np.array([[1,2], [3,4]]) >>> a = np.concatenate((a, [[5,6]]), axis=0) >>> print a.transpose() [[1 3 5] [2 4 6]] >>> print a.shape, a.transpose().shape (3, 2) (2, 3) >>> print a[1].reshape((2,1)) [[3] [4]] reshape() kann die Form eines Arrays ändern, solange die Gesamtanzahl an Element gleich bleibt np.concatenate hängt zwei Matrizen aneinander, axis bestimmt die Dimension, entlang der angefügt wird transpose(), conjugate(): Transponierte, Konjugierte min(),max() berechnen Minimum und Maximum aller Elemente A. Arnold, O. Lenz Physik auf dem Computer 20/30

Lineare Algebra: Vektoren und Matrizen >>> a = np.array([[1,2],[3,4]]) >>> i = np.array([[1,0],[0,1]]) # Einheitsmatrix >>> print a*i # punktweises Produkt [[1 0] [0 4]] >>> print np.dot(a,i) # echtes Matrixprodukt [[1 2] [3 4]] >>> print np.dot(a[0], a[1]) # Skalarprodukt der Zeilen 11 Arrays werden normalerweise punktweise multipliziert np.dot entspricht bei zwei eindimensionalen Arrays dem Vektor-Skalarprodukt bei zwei zweidimensionalen Arrays der Matrix-Multiplikation bei ein- und zweidim. Arrays der Vektor-Matrix-Multiplikation Die Dimensionen müssen passen A. Arnold, O. Lenz Physik auf dem Computer 21/30

Lineare Algebra >>> a = np.array([[1,0],[0,1]]) >>> print np.linalg.det(a) 1 >>> print np.linalg.eig(a) (array([ 1., 1.]), array([[ 1., 0.], [ 0., 1.]])) numpy.cross: Vektorkreuzprodukt numpy.linalg.det,.trace: Determinante und Spur numpy.linalg.norm,.cond: Norm und Kondition numpy.linalg.eig: Eigenwerte und -vektoren numpy.linalg.inv: Inverse einer Matrix berechnen numpy.linalg.cholesky,.qr,.svd: Matrixzerlegungen numpy.linalg.solve(a, b): Lösen von Ax = b A. Arnold, O. Lenz Physik auf dem Computer 22/30

Analyse und Visualisierung Zeit Winkel Geschw. Energie 55.0 1.1605 2.0509 8.000015 55.2 1.3839 0.1625 8.000017 55.4 1.2245-1.7434 8.000016 55.6 0.7040-3.3668 8.000008 55.8-0.0556-3.9962 8.000000 56.0-0.7951-3.1810 8.000009 56.2-1.2694-1.4849 8.000016 56.4-1.3756 0.43024 8.000017 56.6-1.1001 2.29749 8.000014 56.8-0.4860 3.70518 8.000004 Zahlen anschauen ist langweilig! Graphen sind besser geeignet Statistik hilft, Ergebnisse einzuschätzen (Fehlerbalken) Histogramme, Durchschnitt, Varianz A. Arnold, O. Lenz Physik auf dem Computer 23/30

Durchschnitt und Varianz >>> samples=100000 >>> z = np.random.normal(0, 2, samples) >>> print np.mean(z) -0.00123299611634 >>> print np.var(z) 4.03344753342 Arithmetischer Durchschnitt z = len(z) z i /len(z) i=1 Varianz σ(z) = (z z ) 2 A. Arnold, O. Lenz Physik auf dem Computer 24/30

Histogramme >>> zz = np.random.normal(0,1,100000) >>> werte, rand = np.histogram(zz, bins=100, normed=true) Histogramme geben die Häufigkeit von Werten an In bins vielen gleich breiten Intervallen werte sind die Häufigkeiten, raender die Grenzen der Intervalle (ein Wert mehr als in werte) A. Arnold, O. Lenz Physik auf dem Computer 25/30

Malen nach Zahlen matplotlib Ein Modul zum Erstellen von Graphen 2D oder 3D, mehrere Graphen in einem Speichern als Bitmap Kann auch animierte Kurven darstellen A. Arnold, O. Lenz Physik auf dem Computer 26/30

2D-Plots import matplotlib 40000 import matplotlib.pyplot as pyplot 35000 30000... 25000 x = np.arange(0, 2*np.pi, 0.01) 20000 y = np.sin(x) 15000 pyplot.plot(x, y, "g", linewidth=2) 10000 5000 pyplot.text(1, -0.5, "sin(2 pi x)") 0 10 5 0 5 10 pyplot.show() pyplot.plot erzeugt einen 2D-Graphen pyplot.text schreibt beliebigen Text in den Graphen pyplot.show() zeigt den Graphen an Parametrische Plots mit Punkten (x[t], y[t]) für Funktionen Punkte (x[t], y(x[t])) mit x Bereich Farbe und Form über String und Parameter ausprobieren A. Arnold, O. Lenz Physik auf dem Computer 27/30

Mehrfache Graphen bild = pyplot.figure() graph_1 = bild.add_subplot(121, title="sinus und Cosinus") graph_1.plot(x, np.sin(x)) graph_1.plot(x, np.cos(x)) graph_2 = bild.add_subplot(122, title="sinh und Cosh") graph_2.plot(x, np.sinh(x), x, np.cosh(x)) Mehrere Kurven in einem Graphen: plot(x_1,y_1 [,"stil"], x_2,y_2,...)! Oder mehrere plot-befehle Mehrere Graphen in einem Bild 1.0 mit Hilfe von add_subplot 4 3 2 1 0 1 2 3 4 1.0 0.5 0.0 0.5 Sinus und Cosinus 15 10 5 0 5 10 Sinh und Cosh 15 4 3 2 1 0 1 2 3 4 A. Arnold, O. Lenz Physik auf dem Computer 28/30

Logarithmische Skalen 20 normal 20 x logarithmisch 15 15 10 10 5 5 0 0 5 5 10 10 15 15 20 20 0 2 4 6 8 10 y logarithmisch 10-1 logarithmisch 10 0 10 1 10 5 10 5 voll 10 4 10 4 10 3 10 3 10 2 10 2 10 1 10 1 10 0 10 0 10-1 10-1 10-2 0 2 4 6 8 10 10-2 10-1 10 0 10 1 y = exp(x) y = x 2 y = log(x) set_xscale("log") bzw. set_yscale("log") y logarithmisch: y = exp(x) wird zur Geraden y = log(y) = x x logarithmisch: y = log(x) = x ist eine Gerade x + y logarithmisch: Potenzgesetze y = x n werden zu Geraden, da y = log(x n ) = n log(x) = nx A. Arnold, O. Lenz Physik auf dem Computer 29/30

3D-Plots import matplotlib import matplotlib.pyplot as pyplot import mpl_toolkits.mplot3d as p3d... bild = pyplot.figure() z = np.arange(0, 10, 0.1) x, y = np.cos(z), np.sin(z) graph = p3d.axes3d(bild) graph.plot(x, y, z) 1.0 0.8 0.6 0.4 Spirale 0.2 0.5 0.0 0.5 0.5 0.0 0.5 0.0 0.0 0.2 0.4 0.6 0.8 1.0 Oberflaeche 1.0 0.8 0.6 0.4 1 2 3 6 1 2 3 4 5 0.2 0.0 4 5 6 0.2 0.4 0.6 0.0 0.8 1.0 8 6 4 2 0.5 0.0 0.5 plot: wie 2D, nur mit 3 Koordinaten x, y, z plot_wireframe: Gitteroberflächen contourf3d: farbige Höhenkodierung Achtung! 3D ist neu und das Interface ändert sich noch A. Arnold, O. Lenz Physik auf dem Computer 30/30