Computerphysik II Python Einführung S. Gerlach WiSe 2016 S. Gerlach Computerphysik II Programmiersprachen In der Wissenschaft: S. Gerlach Computerphysik II Programmiersprachen - Einteilung Eigenschaften: I Skriptsprachen: Shell, Python, Perl, ... I Kompilierte Sprachen: C/C++, Fortran, Pascal, ... I Objektorientiert: C++, Java, ... I Anwendungssprachen: R, Mathematica, Matlab, ... Anwendungen: I Skripte, Automatisierung: Shell, Python, Make, ... I Datenauswertung & Tests: C/C++, Python, Matlab, ... I Analytische Rechnungen: Mathematica, Maple, SAGE, Python (SymPy), ... I HPC + Scientific Computing: C/C++, Fortran, Python (NumPy, Scipy), ... I Grafische Darstellung: gnuplot, Python (matplotlib), Mathematica, ... S. Gerlach Computerphysik II Programmiersprachen - Verbreitung (TIOBE 2015) S. Gerlach Computerphysik II Programmiersprachen in der Wissenschaft imperativ objektorientiert Skriptsprache Fortran Algol60 Simula Pascal C Smalltalk Fortran 77 Matlab Mathematica C++ Fortran 90 Shell Perl ANSI C Python JAVA C 99 C# C++ 03 Fortran 03 PHP Python 3.0 C 11 C++ 11 S. Gerlach Javascript Python 2.0 Computerphysik II Programmiersprache Python I I I I I Hohe Verbreitung (gut bekannt, viele Bibliotheken) Freie Software interaktive Skriptsprache performant durch Verwendung von optimierten Bibliotheken bzw. Anbindung an C Einfach & flexibel (wenige Sprachfeatures, viele Bibliotheken) aktuell: Python 2.7.12, Python 3.5.2 https://en.wikibooks.org/wiki/Python_Programming http://www.scipy-lectures.org/_downloads/ ScipyLectures-simple.pdf S. Gerlach Computerphysik II Verwendung - interaktiv I I I Terminal: python, python3 >>> 1+1 IPython - opt. Terminal: ipython(3), ipython qtconsole In[1]: %hist In[2]: hist? In[2]: help(abs) Im Browser - IPython-Notebook: ipython notebook S. Gerlach Computerphysik II ”Hello, World” in Python >>> print ’Hello, World!’ Hello, World! 1 p r i n t ( ’ H e l l o , World ! ’ ) $ python(3) skript.py 1 #! / u s r / b i n / env p y t h o n 2 3 # Kommentar 4 p r i n t ( ’ H e l l o , World ! ’ ) $ chmod +x skript.py $ ./skript.py Hello, World! S. Gerlach Computerphysik II Datentypen in Python I Integer (ganzzahlig): int >>> 1+2 1 >>> 3/2 2 1 ( Python 2 ) 3 1 . 5 ( Python 3 ) I Fließkommazahl: float 1.5, 2. I Komplexe Zahl: complex 1.5+0.4j I Boolean: bool False, True S. Gerlach Computerphysik II Variablen in Python 1 2 3 4 a b c d = = = = 4 7. 1.+2. j True → Datentyp wird automatisch zugewiesen. Keine Deklaration nötig! 1 2 3 4 a , b = 1 ,2 a = b = 2. a +=1; a −= 1 ; a ∗= 2 ; a /= 2 a,b = b,a S. Gerlach Computerphysik II Variablenausgabe 1 print (a) 2 3 %p r i n t a , 4 5 p r i n t ( ’\%e ’ \% a ) 6 # e − exponent , f − f l o a t i n g , g − automatic 7 # ( w i e i n C) S. Gerlach Computerphysik II Container Listen: Sammlung verschiedener Typen 1 2 3 4 5 6 7 8 9 a = [ 4 2 , 1+2 j , ’ b l a u ’ ] # index beginnt bei 0 >>> a [ 0 ] 42 >>> a [ −1] ’ blau ’ >>> a [ 1 : ] [1+2 j , ’ b l a u ’ ] Slicing: a[start:stop:step] (start <= i < stop) len(a) Achtung: b=a (gleiches Objekt!), a[:]=3,4,5 (in place) S. Gerlach Computerphysik II Container String: unveränderbare Liste Wörterbuch: Key-Value-Liste 1 2 3 t e l = { ’ S t e f a n ’ : 3 8 2 5 , ’ Hans ’ : 3815} t e l . keys () t e l . values () Tuples: unveränderbare Listen a = (1,2,3) Mengen: ungeordnete, unique Listen a = set(’a’,’b’,’c’) S. Gerlach Computerphysik II Kontrollstrukturen if: Vergleich (==, !=, <, <=, > , >=) 1 2 3 4 5 6 i f i < 0: i = 0 e l i f i == 0 : i = 1 else : print ( i ) → Einrückung beachten! 1 2 3 4 i f 0 < x <= 1 : ... i f e in a : ... S. Gerlach Computerphysik II Kontrollstrukturen for: Schleife mit fester Anzahl an Durchläufen 1 2 for e in a : print (e ) → Einrückung beachten! 1 for e in range ( 1 0 ) : 2 print (e ) 3 4 # range (10) : [ 0 , . . , 9 ] 5 # range (6 ,15 ,3) : [6 ,9 ,12] 6 # xrange () spart Speicher 1 2 for index , item in enumerate ( a ) : print ( index , item ) S. Gerlach Computerphysik II Kontrollstrukturen while: Schleife mit unbekannter Anzahl an Durchläufen 1 b = 0 2 while b < 10: 3 print (b) 4 b += 2 S. Gerlach Computerphysik II Funktionen 1 def q ( x ) : 2 r e t u r n x ∗∗2 3 4 # q (2) : 4 5 # d e f a u l t p a r a m e t e r f ( a , b=0) 1 a = range (10) 2 3 map ( q , a ) 4 # [0 ,1 ,4 ,9 ,.. ,81] S. Gerlach Computerphysik II Standardbibliotheken verschiedene Möglichkeiten: 1 2 3 4 import b i b import b i b a s a l i a s from b i b import ∗ # s c h l e c h t from b i b import f u n c t i o n Beispiele: 1 import numpy 2 numpy . a r r a y ( [ 1 , 2 , 3 ] ) 1 import numpy a s np 2 np . a r r a y ( [ 1 , 2 , 3 ] ) 1 from numpy import a r r a y 2 array ([1 ,2 ,3]) S. Gerlach Computerphysik II Standardbibliotheken 1 2 3 I sys: argv, version, path, .. I os: getcwd(), listdir(), mkdir(), remove(), .. I math: sin(), cos(), log(), exp(), pi, e, .. I cmath: für komplexe Zahlen I numpy: Numerik I scipy: wissenschaftliche Anwendungen I sympy: Symbolisches Rechnen I matplotlib: Grafische Darstellung I random: Zufallszahlen I n [ 1 ] : import math I n [ 2 ] : h e l p ( math ) I n [ 3 ] : p r i n t d i r ( math ) S. Gerlach Computerphysik II NumPy - NumPy-Arrays NumPy-Arrays: optimiert für Zahlen (int/float) 1 2 3 4 5 6 7 8 9 10 11 12 13 from numpy import a r r a y v = array ([1 ,2 ,3 ,4]) M = array ( [ [ 1 . , 2 . ] , [ 3 . , 4 . ] ] ) v . shape # (4 ,1) M. s h a p e # ( 2 , 2 ) v. size # 4 M. s i z e # 4 v . dtype # int64 M. d t y p e # f l o a t 6 4 v . reshape (2 ,2) # array ( [ [ 1 , 2] , [3 , 4 ] ] ) v = a r r a y ( [ 1 , 2 , 3 , 4 ] , d t y p e=c o m p l e x ) S. Gerlach Computerphysik II NumPy - Listen 1 from numpy import a r a n g e , l i n s p a c e , d i a g 2 3 arange (0 ,1 ,0.1) # [ 0 , 0 . 1 , . . . , 0 . 9 ] 4 5 linspace (0.1 ,6) # [0 ,0.2 ,0.4 ,0.6 ,0.8 ,1.0] 6 7 diag ( [ 1 , 2 ] ) # [ [ 1 , 0 ] , [ 0 , 2 ] ] 1 from numpy import s i n , c o s 2 3 v=a r r a y ( [ 1 , 2 , 3 ] ) 4 s i n ( v ) # [ 0.84147098 , 0.90929743 , 5 cos ( v ) # . . . 6 7 v +1, v ∗v , 2∗ x # e l e m e n t w e i s e S. Gerlach Computerphysik II 0.14112001] NumPy - Matrix, etc. 1 2 3 4 5 6 from numpy import dot , m a t r i x d o t (M, v ) # M. v x=m a t r i x ( v ) . T # t r a n s p o s e x . T∗ x # S k a l a r p r o d u k t M∗∗2 # M a t r i x p r o d u k t I Mathematische Funktionen I Statistik I numpy.polynomial: Polynome I numpy.linalg: Lineare Algebra I numpy.fft: Fourier-Transformation I numpy.random: Zufallszahlen/-verteilungen I ... S. Gerlach Computerphysik II SciPy - wissenschaftl. Funktionen I I I I I I I I I I scipy.constants: (physik.) Konstanten scipy.special: Spezielle Funktionen scipy.stats: Statistik scipy.optimize: Optimierung scipy.interpolate: Interpolation scipy.linalg: Lineare Algebra scipy.integrate: Numerische Integration scipy.fft: Fourier-Transformation scipy.signal: Signalanalyse ... 1 from s c i p y . s p e c i a l import binom , j 0 2 3 p r i n t ( binom ( 4 , 2 ) ) # 6 4 print j0 (1) # 0 . 7 6 5. . S. Gerlach Computerphysik II Matplotlib - Darstellung 1 2 3 4 5 6 7 8 # i n ” python ( 3 ) ” : #i m p o r t m a t p l o t l i b a s mpl #mpl . u s e ( ” Qt4Agg ” ) import p y l a b a s p l x = pl . arange (0 ,7 ,0.01) p l . p l o t ( x , x ∗∗2) p l . show ( ) $ ipython --pylab oder $ ipython In[1]: %pylab S. Gerlach Computerphysik II Matplotlib - Darstellung 1 2 3 4 pl pl pl pl . x l a b e l ( ”x−Achse ” ) . t i t l e ( ”$\ s i n \ p i x$ ” ) . xlim (0 ,5) . p l o t ( x , y , ’−−r ’ ) Legende: 1 2 3 p l . p l o t ( x , y1 , l a b e l=” s i n ” ) p l . p l o t ( x , y2 , l a b e l=” c o s ” ) p l . l e g e n d ( l o c= ’ b e s t ’ ) S. Gerlach Computerphysik II SymPy - Symbolisches Rechnen 1 2 3 4 5 6 7 8 9 1 2 3 4 5 import sympy a s s p e = s p . s q r t ( 8 ) # 2∗ s q r t ( 2 ) e . evalf () # 2.1828... e . e v a l f ( 5 0 ) # 50 S t e l l e n x , y = sp . s y m b o l s ( ’ x y ’ ) e = x ∗∗2−2∗ y e + x ∗∗2 # 2∗ x ∗∗2 − 2∗ y e . subs (x , 1.5) # Einsetzen >>> s p . i n i t p r i n t i n g ( ) # h” u b s c h e Ausgabe 2∗\/ 2 >>> s p . l a t e x ( sp . s q r t ( x ∗ ∗ 2 ) ) 2 \\ s q r t {2} S. Gerlach Computerphysik II SymPy - Algebra I expand((x+1)**2) x**2 + 2*x + 1 I factor(x**3 - x**2 + x - 1) (x-1)(x**2+1) I collect(x*y + x*x + x, x) x**2 + x(y+1) I cancel((x**2+2*x+1)/(x**2+x)) (x+1)/x I apart((x**2+2*x)/(x+1)) x+1 - 1/(x+1) I trigsimp((sin(x))**2 + (cos(x))**2) 1 I expand trig(sin(x+y)) sin(x)*cos(y) + sin(y)*cos(x) S. Gerlach Computerphysik II SymPy - Calculus I limit(sin(x)/x, x, 0) 1 I series(sp.cos(x)) 1+x**2/2 + ... I diff(x**2,x) 2*x I solve(x**2-2, x) (-sqrt(2), sqrt(2)) I summation(2*i+1,(i,1,n)) n**2 + 2*n I integrate(x**2,x) x**3/3 sympy.sin(x).series(x,0,10) S. Gerlach Computerphysik II