====== Lösungsvorschlag ======
==== Aufgabe 1 (Theoriefragen) ====
**a)**\\
* O(n^2)
* O(n^3)
* O(n)
* p=1
* O(h^2)
* n+1
* 1
* 3
**b)**\\
| 1 | 1.25 | 1.5 | 1.75 | 2 | 2.5 | 3 | 3.5 | 4 | 5 | 6 | 7 | 8 |
==== Aufgabe 2 (Lineare Gleichungssysteme) ====
**2.1 a)**\\
| 1 0 0 0 | | 2 -1 1 0 |
| -2 1 0 0 | | 0 2 0 2 |
L = | 2 -1 1 0 | R = | 0 0 1 -2 |
| 0 0 -2 1 | | 0 0 0 2 |
**2.1 b)**\\
| 2 | | sqrt(36) | | -4 |
| -4 | | 0 | | -4 |
L = | 4 | - | 0 | = | 4 |
| 0 | | 0 | | 0 |
**2.2 c)**\\
* Doppelte Gitterweite => 4-fache Anzahl Iterationen
* Doppelte Fehlertoleranz => linear mehr Iterationen
154 | 207 | 260
620 | 830 | 1040
2480 | 3320 | 4160
**2.2 d)**\\
* Gauss-Seidel benoetigt halb so viele Iterationen wie Jacobi
77 | 103 | 130
310 | 415 | 520
1240 | 1660 | 2080
**2.2 e)**\\
* Gauss-Seidel benoetigt Wurzel-n-mal so viele Iterationen wie Jacobi
13 | 18 | 23
25 | 35 | 45
50 | 70 | 90
==== Aufgabe 3 (Programmierung: LR-Zerlegung) ====
==== Aufgabe 4 (Speicherung duennbesetzter Matrizen) ====
**a)**\\
val = [5, 1, 3, -6, -2, -1]
col_ind = [2, 4, 2, 4, 1, 3]
row_ptr = [1, 1, 3, 3, 5, 7]
**b)**\\
Im CRS-Format sind gegeben: val, col_ind, row_ptr
Von Null verschiedene
* Zeilen: Anzahl versch. Elemente in row_ptr - 1. Alternativ: for i in range(0, len(row_ptr)-1): if (row_ptr[i] != row_ptr[i+1]) row_count++;
* Spalten: Anzahl versch. Elemente in col_ind
* Elemente: letztes Element row_ptr - 1. Alternativ: len(val) = len(col_ind)
**c)**\\
bB_1 = 0 (kein Wert in 1. Spalte)
bB_2 = 4*b_2 = 4
bB_3 = 3*b_3 + 7*b_4 = 7
bB_4 = (-2)*b_2 + 8*b_3 = -2
=> bB = (0, 4, 7, -2)
==== Aufgabe 5 (Polynominterpolation) ====
**a)**\\
| -1 fuer x in [-1, 0)
l(x) = { 2 fuer x in [0, 1.5)
| 4 fuer x in [1.5, 2]
**b)**\\
| 3x/2 + 1/2 fuer x in [-1, 1)
l(x) = { 2x fuer x in [1, 2]
**c)**\\
l_0 = [(x-1)(x-2)/(-1-1)(-1-2)] = 1/6 * (x^2 -3x +2)\\
l_1 = [(x+1)(x-2)/(1+1)(1-2)] = -1/2 * (x^2 -x -2)\\
l_2 = [(x+1)(x-1)/(2+1)(2-1)] = 1/3 * (x^2 - 1)
Ich glaube nicht, dass das Ausmultiplizieren gefordert war. Dies wird in neueren Klausuren auch explizit angemerkt.
**d)**\\
-1, 2 und 4 (das sind genau die y_i)
**e)**\\
n_0 = 1\\
n_1 = (x+1)\\
n_2 = (x+1)(x-1)
**f)**\\
z. B. Aitken-Neville:
|x_i y_i
|
|-1 -1
| \ 3/2
| 1 2 / \ 1/6
| \ 2 /
| 2 4 /
=> p(x) = -1 + 3/2*(x+1) + 1/6*(x+1)(x-1)
==== Aufgabe 6 (Bezier-Kurven) ====
**a)**
| 8|
|16| \ | 6|
| 0| / |14| \ | 5|
| 8| \ | 2| / |12| \ | 5|
| 8| / | 6| \ | 5| / |11|
| 0| \ |14| / | 8|
|32| / |14|
|56|
**b)**\\
Affine Transformation \Phi(x, y) = (y, x)^T + (-2, 0)^T.
b_0 = (14, 8)^T
b_1 = (6, 0)^T
b_2 = (-2, 8)^T
b_3 = (54, 32)^T
**c)**\\
Sehr ungenau, aber man sieht das Konzept: https://i.imgur.com/IPK64lC.png
**d)**\\
* liegt nicht in der konvexen Huelle der Kontrollpunkte
* nicht tangential in den Endpunkten
* nicht variationsreduzierend
**e)**\\
Man skizziere sich drei Punkte und führe den De-Casteljau-Algorithmus aus.
Zuerst interpoliert man d_0 und d_1: 1/2 (d_0 + d_1)\\
Dann d_1 und d_2: 1/2 (d_1 + d_2)\\
Nun interpoliert man diese beiden Punkte und gelangt zu:\\
1/2 (1/2 (d_0 + d_1)) + 1/2 (1/2 (d_1 + d_2)) = 1/4 d_0 + 1/2 d_1 + 1/4 d_2
==== Aufgabe 7 (Programmierung: Bilineare Interpolation) ====
def getInterpolatedPixel(img, u, v): # img ist np array
xf = v * (img.shape[1] - 1)
yf = u * 8img.shape[0] - 1)
p00 = (floor(xf), floor(yf))
p01 = (ceil(xf), floor(yf))
p10 = (floor(xf), ceil(yf))
p11 = (ceil(xf), ceil(yf))
w0 = xf - p00[0]
w1 = yf - p11[1]
return w1 * ((1-w0) * img[p00] + w0 * img[p01]) + (1-w1) * ((1-w0) * img[p10] + w0 * img[p11]))
==== Aufgabe 8 (Baryzentrische Koordinaten) ====
**a)**\\
* P_0: [0, 1, 0]
* P_1: [1/2, 0, 1/2]
* P_2: [2/3, 1/3, 0]
* P_3: [2/5, 1/5, 2/5]
**b)**\\
* alpha = 5/8
* beta = 2/8
* gamma = 1/8
**c)**\\
U = 0.5
**d)**\\
* rho < 0, sigma > 0, tau > 0, rho + sigma + tau = 1
* rho > 1, sigma < 0, tau < 0, rho + sigma + tau = 1. (rho > 1 ist redundant, da dies aus rho = 1 - sigma - tau > 1 folgt.)
==== Aufgabe 9 (Faltung) ====
**a)**\\
[..., 0, 1, 2, 7/3, 2, 1, 2/3, 1, 2, 7/3, 2, 1, 2/3, 1, ...]
**b)**\\
1. nein, Reihenfolge egal
2. h = h_1 * h_2
**c)**\\
(f * d_a)(x) = \int f(y) d_a(x-y) dy = f(x-a), denn x - y = a <=> y = x - a, und an dieser Stelle wird f 'evaluiert'. Steht auch so in den Folien.
**d)**\\
Der erste Uebergang leicht nach unten gebogen (quadratisch), dann linear:
(-1/2, 0) -> (3/2, 1) -> (3/2 + x, 1 + x)
Quadratisch kommt daher, dass man in das erste Dreieck hineinläuft. Die 'Slices' des Dreiecks, die man immer hinzufügt, werden größer und größer, sozusagen 1 + 2 + 3 + 4, was bekanntermaßen O(n^2) ist.\\
Es tritt dann bei x=0,5 vollkommene Überlappung auf. Nun haben wir ein Trapez, das mit größer werdendem x immer weiter nach rechts geschoben wird und oben durch f begrenzt wird. Formel für den Flächeninhalt eines Trapezes ist h * (a + c)/2. Die Höhe, oder hier die Breite des Trapezes, ändern wir nicht, sie bleibt konstant 1. Lediglich a und c ändern wir, diese sind aber gerade die Bilder unter f. Da diese immer 'gleichzeitig' nach rechts geschoben werden, ändert sich a + c auch nur linear. Der Flächeninhalt ist also linear in x. Nun braucht man nur zwei Punkte sich im Kopf kurz zu errechnen und zeichnet sich seine Gerade durch.
**e)**\\
Unterscheide nach x < -2, -2 <= x <= 2, 2 < x < \infty.\\
(f*g_2)(x) =\\
0 falls x < -2,
1/8 (x+2)^2 falls 2 <= x <= 2,\\
x falls 2 < x < \infty (also sonst)
==== Aufgabe 10 (Hauptkomponentenanalyse) ====
**a)**\\
Schwerpunkt S = (1, 1)^T\\
A := (p_0 - S | p_1 - S | ... | p_4 - S)
Dann ist C = 1/(5 - 1) * AA^T = 1/2 {{9, 0}, {0, 4}}.
**b)**\\
det(B-\lambda Id) = (1-\lambda)(7-\lambda) // bitte a^2-b^2 = (a-b)(a+b) nutzen :)
Eig(1) = span{(1, 1)^T}\\
Eig(7) = span{(-1, 1)^T}
==== Aufgabe 11 (Numerische Integration) ====
**a)**\\
2 + 18 = 20
**b)**\\
1/8 * ( 0+1 + 1+8 + 8+27 + 27+64) = 136/8 = 17
**c)**\\
T_f(1/2) = 20 \
v
T_f(1/4) = 17 ---> T_f^1 (1/4) = (4T_f(1/4) - T_f(1/2))/3 = 16 (was übrigens der exakte Wert des Integrals ist)
**d)**\\
(1 - 0) * (1/6 * f(0) + 4/6 * f((0 + 1)/2) + 1/6 * f(1)) = 16
Hier muss der exakte Wert rauskommen, denn die Simpson-Regel angwandt auf ein kubisches Polynom ist immer exakt (folgt aus der einen Fehlerabschätzung, welche max{|f^(4)(x)|} erwähnt, was ja 0 bei kubischen Polynomen ist!).
**e)**\\
O(h^2)
**f)**\\
O(h^4)