43
Scientific Computing in Computer Science, Technische Universit¨ at M ¨ unchen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst definiert. Beim Aufruf der Funktion wird die Funktion selbst wieder aufgerufen. Abbruchkriterium verhindert endlose Rekursion P. Neumann: Einf¨ uhrung in die wissenschaftliche Programmierung IN8008, Wintersemester 2014/2015 77

Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Embed Size (px)

Citation preview

Page 1: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Rekursion

• Bei einer Rekursion wird eine Funktion durch sich selbstdefiniert.

• Beim Aufruf der Funktion wird die Funktion selbst wiederaufgerufen.

• Abbruchkriterium verhindert endlose Rekursion

Factorial

def recursiveFactorial(n):

if n==1:

return 1

else:

return n*recursiveFactorial(n-1)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 77

Page 2: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Rekursion

• Bei einer Rekursion wird eine Funktion durch sich selbstdefiniert.

• Beim Aufruf der Funktion wird die Funktion selbst wiederaufgerufen.

• Abbruchkriterium verhindert endlose Rekursion

Factorial

def recursiveFactorial(n):

if n==1:

return 1

else:

return n*recursiveFactorial(n-1)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 77

Page 3: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Docstrings• Ein Grund fur Funktionen: Funktionalitat kapseln• Jemand, der die Funktion nicht geschrieben hat, soll sie

verwenden konnen.⇒ Dokumentation notig!• Ein String (ein- oder mehrzeilig) nach dem Header ist fur

interaktive Dokumentation vorgesehen.• Python ignoriert den String (Ausdruck ohne Zuweisung) bei der

Funktionsausfuhrung.• Das Hilfesystem (und der Code-Leser) kann den String

verwenden.• Nicht nur fur Funktionen, sondern auch fur Klassen, Module, ...

>>> def blubb ():

>>> "Unsinnige Funktion , die ’blubb ’ ausgibt"

>>> print "blubb"

>>> blubb()

blubb

>>> help(blubb)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 78

Page 4: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen

Hands-On: Welcher Wert wird am Ende fur x ausgegeben?

>>> def f(x):

>>> x = x + 1

>>> x = 3

>>> f(x)

>>> x

x=3

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 79

Page 5: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen

Hands-On: Welcher Wert wird am Ende fur x ausgegeben?

>>> def f(x):

>>> x = x + 1

>>> x = 3

>>> f(x)

>>> x

x=3

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 79

Page 6: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen: Irgendwo in Munchen

InformationHbf, Gleis 8,

10:32.

Wann gehtdie nächste

S-Bahn?

• Informationsschalter: gibt Auskunft uber einen bestimmtenBahnhof

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 80

Page 7: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen: Irgendwo in Munchen

Information InformationHbf, Gleis 8,

10:32.

Wann gehtdie nächste

S-Bahn?

• Informationsschalter: gibt Auskunft uber einen bestimmtenBahnhof

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 80

Page 8: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen: Irgendwo in Munchen

Information InformationOstbhf,

Gleis 3, 10:52

Wann gehtdie nächste

S-Bahn?

• Informationsschalter: gibt Auskunft uber einen bestimmtenBahnhof

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 80

Page 9: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen

Information Information

x=3 f(x)

Information

Kopie

in f(x):

Information

Schau' dir ab jetztden Ostbahnhof an!

Information

Ostbhf,Gleis 3,10:52.

Wann gehtdie nächste

S-Bahn?

in f(x):

• Bahnhofe: Objekte• Informationsschalter: Referenz auf ein Objekt Bahnhof→ kann Information vom Bahnhof “auslesen”→ kann auf beliebigen Bahnhof zeigen

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 81

Page 10: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Variablen in Funktionen

Information Information

x=3 f(x)

Information

Kopie

in f(x):

Information

Schau' dir ab jetztden Ostbahnhof an!

Information

Ostbhf,Gleis 3,10:52.

Wann gehtdie nächste

S-Bahn?

in f(x):

• Variablen sind Referenzen auf Objekte• Funktionsaufruf mit Variable→ ubergibt Kopie der Referenz→ Funktion kann sowohl auf referenziertem Objekt arbeiten als auch→ Referenz auf neues Objekt setzen

• Variable außerhalb Funktion bleibt Referenz auf urspr. ObjektP. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 82

Page 11: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Call by Object Reference

• Bei Funktionsaufruf: Referenz auf Parameterobjekt (”Adresse“ ,id) wird ubergeben

• Referenz (id) wird kopiert (Vorteil: wenig Daten)

Object

3

Ref.

X

in fct.

X

Ref.

outside

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 83

Page 12: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Call by Object Reference (2)• ACHTUNG: Zuweisung andert Referenzobjekt in der Funktion!

>>> def add_one(x):

>>> x = x + 1

>>> x = 3

>>> add_one(x)

>>> x #still x==3

Object

3X

Ref.

outside outside

Ref.

X

in fct. in fct.

Object

4

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 84

Page 13: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Call by Object Reference (3)

• Nach der Zuweisung zeigt die lokale Variable auf ein neuesObjekt.

• Mit Methoden kann dieser Effekt verhindert und das bisherigeObjekt verandert werden.

>>> def append1(l):

>>> l = l + [4]

>>>

>>> def append2(l):

>>> l.append (4)

>>>

>>> l = [1,2,3]

>>> append1(l); l

[1,2,3]

>>> append2(l); l

[1,2,3,4]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 85

Page 14: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Anonyme Funktionen

• Normale Funktionen mussen separat definiert werden.• Sie bekommen einen Namen, mit dem auf sie zugegriffen wird.

>>> def inc(i):

>>> return i+1

>>> inc (3)

4

• Namenlose/Anonyme Funktionen erhalten keinen Namen.• Sie konnen an beliebigen Stellen in den Code eingebaut werden.

>>> inc = lambda(i): i+1

>>> inc (3)

4

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 86

Page 15: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

map• map wendet eine Funktion auf alle Elemente einer Liste an• Die Funktion kann naturlich auch anonym sein.

>>> L = range (10)

>>> map(lambda x: x*x+1, L)

[1, 2, 5, 10, 17, 26, 37, 50, 65, 82]

• In diesem Fall ware das sogar noch kurzer mit listcomprehensions (nachste Folie) gegangen.

filter• filter wendet ebenfalls eine Funktion auf alle Elemente einer

Liste an.• Diejenigen Elemente, fur die die Funktion True zuruckgibt,

werden zuruckgegeben.

>>> filter(lambda x: x%2==0, L)

[0, 2, 4, 6, 8]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 87

Page 16: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

map• map wendet eine Funktion auf alle Elemente einer Liste an• Die Funktion kann naturlich auch anonym sein.

>>> L = range (10)

>>> map(lambda x: x*x+1, L)

[1, 2, 5, 10, 17, 26, 37, 50, 65, 82]

• In diesem Fall ware das sogar noch kurzer mit listcomprehensions (nachste Folie) gegangen.

filter• filter wendet ebenfalls eine Funktion auf alle Elemente einer

Liste an.• Diejenigen Elemente, fur die die Funktion True zuruckgibt,

werden zuruckgegeben.

>>> filter(lambda x: x%2==0, L)

[0, 2, 4, 6, 8]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 87

Page 17: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

List Comprehension

• Einfache Listen lassen sich z.B. mit range erzeugen.• Fur komplexere Listen gibt es list comprehension.

>>> b = [i**2 for i in range (0 ,10) if i%2==0]

>>> b

[0, 4, 16, 36, 64]

• list comprehensions konnen geschachtelte Schleifen nachbilden:

>>> c = [(i,j) for i in range (1,5) if i%2==0

for j in range (1,5) if j%2!=0]

>>> c

[(2, 1), (2, 3), (4, 1), (4, 3)]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 88

Page 18: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

List Comprehension

• Einfache Listen lassen sich z.B. mit range erzeugen.• Fur komplexere Listen gibt es list comprehension.

>>> b = [i**2 for i in range (0 ,10) if i%2==0]

>>> b

[0, 4, 16, 36, 64]

• list comprehensions konnen geschachtelte Schleifen nachbilden:

>>> c = [(i,j) for i in range (1,5) if i%2==0

for j in range (1,5) if j%2!=0]

>>> c

[(2, 1), (2, 3), (4, 1), (4, 3)]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 88

Page 19: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

List Comprehension (2)• Generelle Syntax:

[expression for item1 in iterable1 if condition1

for item2 in iterable2 if condition2

...

for itemN in iterableN if conditionN]

• Falls keine Bedingung angegeben: automatisch True

• Syntax entspricht:

s = []

for item1 in iterable1:

if condition1:

for item2 in iterable2:

if condition2:

....

for itemN in iterableN:

if conditionN: s.append(expression)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 89

Page 20: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

List Comprehension (2)• Generelle Syntax:

[expression for item1 in iterable1 if condition1

for item2 in iterable2 if condition2

...

for itemN in iterableN if conditionN]

• Falls keine Bedingung angegeben: automatisch True

• Syntax entspricht:

s = []

for item1 in iterable1:

if condition1:

for item2 in iterable2:

if condition2:

....

for itemN in iterableN:

if conditionN: s.append(expression)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 89

Page 21: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

List Comprehension: Hands-On

Hands-On: Gegeben: Matrix A ∈ RN×N . Alle Eintrage Aij mit Indizesi + j = N − 1 sollen (als Liste) zuruckgegeben werden (Indizesfangen bei (0,0) an). Die Matrix soll als doppelte Liste gegeben sein(je eine Liste pro Zeile). Testmatrix:

A =

1 2 34 5 67 8 9

N = 3

A = [[1,2,3],[4,5,6],[7,8,9]]

c = [A[i][j] for i in range(0,N)

for j in range(0,N) if (i+j==N-1)]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 90

Page 22: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

List Comprehension: Hands-On

Hands-On: Gegeben: Matrix A ∈ RN×N . Alle Eintrage Aij mit Indizesi + j = N − 1 sollen (als Liste) zuruckgegeben werden (Indizesfangen bei (0,0) an). Die Matrix soll als doppelte Liste gegeben sein(je eine Liste pro Zeile). Testmatrix:

A =

1 2 34 5 67 8 9

N = 3

A = [[1,2,3],[4,5,6],[7,8,9]]

c = [A[i][j] for i in range(0,N)

for j in range(0,N) if (i+j==N-1)]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 90

Page 23: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Beispiel: Numerische Integration (Quadratur)Berechnung des Integrals

F1(f ,a,b) :=

∫ b

af (x) dx

Verschiedene numerische Verfahren; hier jetzt:Trapezregel• Bestimmung des Funktionswertes an beiden Randern• Multiplikation des Mittelwerts mit der Intervallbreite

• F1 ≈ T := (b − a) · f (a)+f (b)2

• Polynom 1. Ordnung (Flache entspricht Trapez)Quadraturfehler

|T − F1| ≤112· sup

x∈[a,b]|f ′′(x)| · (b − a)3

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 91

Page 24: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Beispiel: Numerische Integration (Quadratur)Berechnung des Integrals

F1(f ,a,b) :=

∫ b

af (x) dx

Verschiedene numerische Verfahren; hier jetzt:Trapezregel• Bestimmung des Funktionswertes an beiden Randern• Multiplikation des Mittelwerts mit der Intervallbreite

• F1 ≈ T := (b − a) · f (a)+f (b)2

• Polynom 1. Ordnung (Flache entspricht Trapez)

Quadraturfehler

|T − F1| ≤112· sup

x∈[a,b]|f ′′(x)| · (b − a)3

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 91

Page 25: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Beispiel: Numerische Integration (Quadratur)Berechnung des Integrals

F1(f ,a,b) :=

∫ b

af (x) dx

Verschiedene numerische Verfahren; hier jetzt:Trapezregel• Bestimmung des Funktionswertes an beiden Randern• Multiplikation des Mittelwerts mit der Intervallbreite

• F1 ≈ T := (b − a) · f (a)+f (b)2

• Polynom 1. Ordnung (Flache entspricht Trapez)Quadraturfehler

|T − F1| ≤112· sup

x∈[a,b]|f ′′(x)| · (b − a)3

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 91

Page 26: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Summenregeln• Bei großen Intervallen wird auch der Fehler sehr groß.• ⇒ Unterteilung in n kleine Intervalle• Jedes Teilintervall hat Lange h = (b − a)/n

Trapezsumme

TS := h ·

[f (a)

2+

n−1∑i=1

f (a + ih) +f (b)

2

]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 92

Page 27: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Summenregeln• Bei großen Intervallen wird auch der Fehler sehr groß.• ⇒ Unterteilung in n kleine Intervalle• Jedes Teilintervall hat Lange h = (b − a)/n

Trapezsumme

TS := h ·

[f (a)

2+

n−1∑i=1

f (a + ih) +f (b)

2

]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 92

Page 28: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Implementierung der Trapezsumme

def trapezsumme(f, a, b, n):

h = (b-a)/n

sum = (f(a) + f(b))/2

for i in range(1,n):

sum = sum + f(a + h*i)

return sum*h

Funktion zum Test• Funktion, die analytisch leicht zu integrieren ist• ⇒ Fehler lasst sich leicht berechnen

import math

def f(x):

return math.sin(math.pi*x)

def f_int(x):

return -math.cos(math.pi*x)/math.pi

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 93

Page 29: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Implementierung der Trapezsumme

def trapezsumme(f, a, b, n):

h = (b-a)/n

sum = (f(a) + f(b))/2

for i in range(1,n):

sum = sum + f(a + h*i)

return sum*h

Funktion zum Test• Funktion, die analytisch leicht zu integrieren ist• ⇒ Fehler lasst sich leicht berechnen

import math

def f(x):

return math.sin(math.pi*x)

def f_int(x):

return -math.cos(math.pi*x)/math.pi

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 93

Page 30: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Berechnung mit unterschiedlicher Genauigkeit: Fehler empirisch

• n = 21...26

a_bsp = 0.

b_bsp = 1.

exakt = f_int(b_bsp) - f_int(a_bsp)

for i in range (1,7):

n = 2**i

t = trapezsumme(f, a_bsp , b_bsp , n)

print ’%4d % -12.6g % -12.6g’ % (n, t, exakt -t)

n Naherung Fehler2 0.5 0.136624 0.603553 0.03306648 0.628417 0.00820234

16 0.634573 0.0020466232 0.636108 0.00051140964 0.636492 0.000127837

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 94

Page 31: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Fehler der Trapezsumme: Fehler analytisch• In jedem Teilintervall ist der Fehler

≤ 112· sup

x∈[a,b]|f ′′(x)| · h3

• Bei n = (b − a)/h Intervallen ist damit der Gesamtfehler

|TS − F1| ≤112· sup

x∈[a,b]|f ′′(x)| · (b − a) · h2

• Verdopplung des Rechenaufwands (Halbierung von h) reduziertden maximalen Fehler um den Faktor 4

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 95

Page 32: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Module• Funktionalitat zusammenfassen in einer separaten .py Datei• Importieren Bibliotheksmodul (Schon verwendet: math, time, ...)• Beispiel (tools.py):

""" This module provides some helper tools.

Try it."""

counter = 42

def readfile(fname):

"Read text file. Returns list of lines"

fd = open(fname , ’r’)

data = fd.readlines ()

fd.close ()

return data

def do_nothing ():

"Do really nothing"

pass

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 96

Page 33: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Importieren• Modul importieren

import tools

tools.do_nothing ()

print tools.counter

• Modul unter neuem Namen importieren

import tools as t

t.do_nothing ()

• Einzelne Funktionen direkt importieren

from tools import do_nothing , readfile

from tools import counter as cntr

do_nothing ()

print cntr

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 97

Page 34: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Importieren• Modul importieren

import tools

tools.do_nothing ()

print tools.counter

• Modul unter neuem Namen importieren

import tools as t

t.do_nothing ()

• Einzelne Funktionen direkt importieren

from tools import do_nothing , readfile

from tools import counter as cntr

do_nothing ()

print cntr

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 97

Page 35: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Importieren• Modul importieren

import tools

tools.do_nothing ()

print tools.counter

• Modul unter neuem Namen importieren

import tools as t

t.do_nothing ()

• Einzelne Funktionen direkt importieren

from tools import do_nothing , readfile

from tools import counter as cntr

do_nothing ()

print cntr

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 97

Page 36: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Import beeinflussen• Alle Symbole in den Namensraum importieren

from tools import *

do_nothing ()

print counter

• Module konnen bestimmen, welche Symbole mitfrom module import * importiert werden:

# module tools.py

__all__ = [’readfile ’, ’counter ’]

Die Funktion do_nothing() ist nach import * nicht bekannt!

Funktionalitat abfragen•

dir(tools)

dir(math)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 98

Page 37: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Import beeinflussen• Alle Symbole in den Namensraum importieren

from tools import *

do_nothing ()

print counter

• Module konnen bestimmen, welche Symbole mitfrom module import * importiert werden:

# module tools.py

__all__ = [’readfile ’, ’counter ’]

Die Funktion do_nothing() ist nach import * nicht bekannt!Funktionalitat abfragen•

dir(tools)

dir(math)

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 98

Page 38: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Hilfe zu Modulen und Funktionen• Docstrings abfragen mit help

import tools

help(tools)

help(tools.do_nothing)

Ausfuhrbares Programm als Modul?• tools.py soll sowohl Bibliothek sein, als auch selbst ausfuhrbar

# tools.py

...

if __name__ == ’__main__ ’:

print "tools.py executed"

else:

print "tools.py imported as module"

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 99

Page 39: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Hilfe zu Modulen und Funktionen• Docstrings abfragen mit help

import tools

help(tools)

help(tools.do_nothing)

Ausfuhrbares Programm als Modul?• tools.py soll sowohl Bibliothek sein, als auch selbst ausfuhrbar

# tools.py

...

if __name__ == ’__main__ ’:

print "tools.py executed"

else:

print "tools.py imported as module"

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 99

Page 40: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Module debuggen• Wenn ein Modul geandert wird, werden Anderungen nur

wirksam, wenn Python neu gestartet wird, oder reload(Python<3.0) verwendet wird.

reload(tools)

Pfad fur Module• Python sucht im Suchpfad und im aktuellen Verzeichnis• Suchpfad kann erweitert werden

import sys

sys.path.append("folder/to/module")

import ...

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 100

Page 41: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Module debuggen• Wenn ein Modul geandert wird, werden Anderungen nur

wirksam, wenn Python neu gestartet wird, oder reload(Python<3.0) verwendet wird.

reload(tools)

Pfad fur Module• Python sucht im Suchpfad und im aktuellen Verzeichnis• Suchpfad kann erweitert werden

import sys

sys.path.append("folder/to/module")

import ...

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 100

Page 42: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Pakete

• Module konnen gruppiert werden• Hierbei ist die Verzeichnisstruktur wichtig

tools/

__init__.py # Inhalt fur "import tools"

files.py # fur "import tools.files"

graphics.py # fur "import tools.graphics"

stringtools/

__init__.py # fur "import tools.stringtools"

... weitere Verschachtelung moglich

• Wenn from tools import * Untermodule enthalten soll, musstools/__init__.py folgende Zeile enthalten:

__all__ = ["files", "graphics"]

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 101

Page 43: Rekursion - in.tum.de · Scientific Computing in Computer Science, Technische Universit¨at Munc¨ hen Rekursion Bei einer Rekursion wird eine Funktion durch sich selbst

Scientific Computing in Computer Science, Technische Universitat Munchen

Pakete

from example import *

files.foo()

graphics.bar()

P. Neumann: Einfuhrung in die wissenschaftliche Programmierung

IN8008, Wintersemester 2014/2015 102