Institut für Informatik
Dr. Philipp Neumann
Dr. Andreas Paul
Alfredo Parra
Technische Universität München
WS 2014/2015
Einführung in die wissenschaftliche
Programmierung
Übungsblatt 10
1.) Minimierung der Rosenbrock Funktion
Die Rosenbrock Funktion f : R2 → R ist gegeben durch
f (x1 , x2 ) = (1 − x1 )2 + 100 · x2 − x21
2
.
i) Implementieren Sie die Funktion rosenbrock(x), die eine Liste x = [x1,x2]
als Parameter übergeben bekommt und den Wert der Funktion an der Stelle
[x1,x2] zurückgibt.
ii) Bestimmen Sie mit scipy.optimize.fmin das Minimum dieser Funktion.
Verwenden Sie als Anfangswert die Koordinate x = [0,2.5].
iii) Speichern Sie die Iterationsschritte mit Hilfe einer Callback Funktion. Definieren
Sie dafür eine Funktion store iter(x), die die aktuelle Koordinate als
Parameter übergeben bekommt und sie zu einer global definierten Liste
schritte hinzufügt. Übergeben Sie store iter an die Funktion fmin mit
dem Keyword Argument callback = store iter. Es wird dann store iter
nach jedem Iterationsschritt aufgerufen.
iv) Stellen Sie die Funktion und die Iterationsschritte mit matplotlib dar.
2.) Interpolation und Regression (Hands-On)
Gegeben sind die Daten
x
y
1 2
1 2
3 4
1.5 2
5 6 7
.
3 2.5 4
a.) Polynominterpolation
Finden Sie die Koeffizienten des Interpolationspolynoms p
p(x) = a0 + a1 x + a2 x2 + a3 x3 + a4 x4 + a5 x5 + a6 x6 ,
mit p(xi ) = yi für die Daten in der Tabelle.
i) Berechnen Sie die Koeffizienten mit Hilfe der Vandermonde Matrix. Stellen
Sie hierzu das folgende Gleichungssystem auf (für n = 6) und lösen Sie es
mit der Funktion scipy.linalg.solve:

  

n−2
a
y0
x
.
.
.
x
1
xn0 xn−1
n
0
0
0
xn xn−1 xn−2 . . . x1 1 an−1   y1 
1
1

  
 1
 ..
..
..
.. ..   ..  =  .. 
.
.
.
. .  .   . 
n−2
n−1
n
. . . xn 1
a0
yn
xn
xn xn
ii) Benutzen Sie die Funktion numpy.polyfit zur Ermittlung der Polynomialkoeffizienten.
iii) Stellen Sie die Lösungen mit matplotlib dar. Was passiert weit außerhalb
des Intervalls [1, 7]?
b.) Lineare Regression
Bestimmen Sie die lineare Ausgleichsgerade der Daten, d.h. bestimmen Sie Koeffizienten
m und t der Funktion f (x) = mx + t, sodass
6
X
(yi − f (xi ))2 ,
i=0
minimal ist.
i) Lösen Sie dazu das Gleichungssystem Bz = b mit B = AT A, b = AT y und


 
x0 1
y0
x1 1
y1 


 
A =  .. ..  ,
y =  ..  .
 . .
.
x6 1
y6
ii) Verwenden Sie nun zum Lösen alternativ die Funktion scipy.linalg.lstsq.
iii) Stellen Sie wieder die Lösungen graphisch dar.
3.) Parameter fitten (Hausaufgabe)
Auf der Webseite zur Vorlesung finden Sie eine Datei mit zwei Datensätzen. Die
erste Spalte enthält die Werte ti , die zweite den ersten Datensatz yi und die dritte
den zweiten Datensatz zi . Für jeden der zwei Datensätze sollen nun Koeffizienten
p∗ = (p0 , p1 , p2 , p3 ) ∈ R4 der Funktion
2π
t − p2 + p3 t.
f (t) = p0 cos
p1
so bestimmt werden, dass die Summe der Fehlerquadrate minimal ist, d.h. für den
ersten Datensatz muss gelten
∗
p = arg min4
p∈R
n
X
(f (ti ) − yi )2 .
i=0
Verwenden Sie die Funktion scipy.optimize.leastsq und stellen Sie Ihr Ergebnis
mit matplotlib dar.
4) Der Weihnachtsmann fliegt um die Welt
(Hausaufgabe - Fortgeschritten)
Der Weihnachtsmann muss in 24h an Weihnachten um die Welt reisen und alle
Menschen mit Geschenken beglücken. Seine Reise beginnt am Nordpol. Zur Vereinfachung
modellieren wir die Welt als Scheibe (d.h. der Weihnachtsmann fliegt einmal um
die Scheibe mit Radius r = 6370km herum).
Der Weihnachtsmann weiß,
• dass sein magischer Flugschlitten mit jedem abgeladenen Geschenk schneller
wird. Die 7 · 109 Geschenke werden gemäß der Formel
p(x) =
7 · 109
−(x − πr)3 + (πr)3
3
2(πr)
(1)
über die Erdoberfläche x ∈ [0, 2πr] verteilt (x = 0 und x = 2πr entsprechen
dem Nordpol). In verschiedenen Testflügen konnte der Weihnachtsmann die
folgende Formel für die Geschenkentlade-Beschleunigung ermitteln:
a(x) := p(x)/109
(2)
• dass seine Rentiere mit zunehmender Flugzeit müde werden und den Schlitten
immer langsamer ziehen. Die entsprechende Abbremsung ist gegeben durch:
d(t) := 0.2t
(3)
i) Erstellen Sie ein mathematisches Modell, das die Position x(t) und die Geschwindigkeit
u(t) des Flugschlittens beschreibt.
ii) Lösen Sie das entstandene Modell mit Hilfe des expliziten Euler-Verfahrens
und implementieren Sie das numerische Verfahren in Python. Betrachten Sie
hierzu das Zeitintervall eines Tages, t ∈ [0, 24].
Wie schnell muss die Startgeschwindigkeit des Schlittens sein, damit der
Weihnachtsmann in 24h die Welt einmal komplett umrunden kann?
iii) Stellen Sie die Flugbahn des Weihnachtsmanns in einem x(t)−u(t)-Diagramm
dar.
Ein frohes Weihnachtsfest und einen guten Rutsch!

Einführung in die wissenschaftliche Programmierung 1