![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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/1.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/2.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/3.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/4.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/5.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/6.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/7.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/8.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/9.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/10.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/11.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/12.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/13.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/14.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/15.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/16.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/17.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/18.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/19.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/20.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/21.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/22.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/23.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/24.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/25.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/26.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/27.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/28.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/29.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/30.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/31.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/32.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/33.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/34.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/35.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/36.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/37.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/38.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/39.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/40.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/41.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/42.jpg)
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](https://reader030.vdokument.com/reader030/viewer/2022040702/5d66166588c9936e7d8bb7e5/html5/thumbnails/43.jpg)
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