Computerphysik II - Python Einführung

Werbung
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
Herunterladen