Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » algoks » Forendiskussionen   (Übersicht)

Forendiskussionen

Lösungsversuch

Aufgabe 1 - Komplexität

a) O(n)

b) O(n²)

c) O(n³)

d) O(n²)

e) O(n)

f) O(n)

g) O(n²)

h) O(n)

Aufgabe 2 - Speicherung dünn besetzter Matrizen

a)

val = 3, 1, 5, 6, -2, -1
col_idx = 1, 3, 1, 3, 1, 2
row_ptr = 0, 0, 2, 2, 4, 6

b)

m entspricht der Anzahl der Einträge im row_ptr - 1
n entspricht mindestens des größten Werts im col_ind + 1

c)

|0  0  0  0  0|
|0  4  0 -2  0|
|0  0  3  8  0|
|0  0  7  0  4|

Aufgabe 3 - Numerische Integration

a)

12
1. Trapez: (1,0), (1,5), (3,0), (3,1)
2. Trapez: (3,0), (3,1), (5,0), (5,5)

b)

10
1. Trapez: (1,0), (1,5), (2,0), (2,2)
2. Trapez: (2,0), (2,2), (3,0), (3,1)
3. Trapez: (3,0), (3,1), (4,0), (4,2)
4. Trapez: (4,0), (4,2), (5,0), (5,5)

c)

28/3

d)

28/3

Aufgabe 4 - Least-Square Approximation

a)

Für Q:
w_00 = 1/2
w_10 = 1/6
w_11 = 1/12
w_01 = 1/4

Für M:
w_00 = 1/4
w_10 = 1/4
w_11 = 1/4
w_01 = 1/4

b)

w_N = 1/2
w_S = 1/2
w_W = 1/2
w_O = 1/2
w_NO = -1/4
w_NW = -1/4
w_SO = -1/4
w_SW = -1/4

Aufgabe 5 - Singulärwertzerlegung

a)

Singulärwerte: 1, 1/2, 1/3
Rang: r = 3
Bild: span{(0, -1, 0)^T, (-1, 0, 0)^T, (0, 0, 1)^T}
Kern: span{(-1/2, 1/2, -1/2, 1/2)^T}
Konditionszahl: 1/(1/3) = 3

b)

U^T * (1, 0, -2)^T = (0, -1, -2)^T
S^~1 * (0, -1, -2)^T = (0, -2, -6, 0)^T
V * (0, -2, -6, 0)^T = (2, -4, -4, 2)^T

c)

|   0     0    0    0|
|-1/2  -1/2  1/2  1/2|
|   0     0    0    0|

Aufgabe 6 - Programmierung: LU-Zerlegung

a)

void Solver::decomposeLU(const Matrix& m, Matrix& l, Matrix& u) { 
	int d = m.getWidth();
	u = m;
	l.setIdentity();
 
	for(int c = 0; c < d; c++) {
		for(int r = c + 1; r < d; r++) {
			float factor = u(r,c) / u(c,c);
 
			for(int c2 = c; c < d; c++) {
				u(r, c2) = u(r, c2) - u(c, c2) * factor;
			}
 
			l(r,c) = factor;
		}
	}
}

b)

void Solver::solveSystem(const Matrix& m, const Matrix& b, Matrix& x) {
	int d = m.getHeight();
	Matrix u(d, d);
	Matrix l(d, d);
	Matrix y(d, 1);
	decomposeLU(m, l, u);
	forwardSubstitution(l, b, y);
	backwardSubstitution(u, y, x);
}

c)

float Solver::calcDeterminant(const Matrix& m) {
	int d = m.getHeight();
	Matrix u(d, d);
	Matrix l(d, d);
	decomposeLU(m, l, u);
 
	float res = 1.0f;
	for(int i = 0; i < d; i++) {
		res *= u(i,i);
	}
 
	return res;	
}

Aufgabe 7 - Programmierung: Bildbearbeitung

a)

void computeDerivativeXX(const Image& image, Image& result) {
	int d = image.getDimension();
 
	for(int r = 0; r < d; r++) {
		for(int c = 0; c < d; c++) {
			if(c < 2 || c >= d - 2)
				result(r,c) = 0.0f;
			else
				result = -2 * image(r,c) + image(r,c-2) + image(r, c+2);
		}
	}
}

b)

void computeLaplacian(const Image& image, Image& result) {
	int d = image.getDimensions();
 
	Image dX(d);
	Image dY(d);
 
	computeDerivativeXX(image, dX);
	computeDerivativeYY(image, dY);
 
	for(int r = 0; r < d; r++) {
		for(int c = 0; c < d; c++) {
			result(r, c) = dX(r,c) + dY(r, c);
		}
	}
}

c)

Aufgabe 8 - Nichtlineare Optimierung

a)

s_0 = (0, -2)^T
t_0 = 1/2
x_1 = (1, 0)^T

s_1 = (-2, 0)^T
t_1 = 1/4
x_2 = (1/2, 0)^T

b)

s_x = 0, s_y beliebig
z.B.: (0, 1)^T

c)

Konvergenzordung:
Die Konvergenzordnung beschreibt, um welchen Grad die Genauigkeit einer Approximation pro Iterationsschirtt zunimmt.

Lineare Kovergenz:

Für alle c < 1 gilt:
|x_i+1 - x*| <= c * |x_i - x*|

Quadratische Kovergenz:
Potenzordnung p mit der der Fehler kleiner wird:

Für alle c < 1 gilt:
|x_i+1 - x*| <= c * |x_i - x*|²

Aufgabe 9 - Interpolation

a)

       { -x + 1    für  1 <= x < 3
L(x) = { 2x - 8    für  3 <= x < 5
       { -2x + 12  für  5 <= x < 7

b)

Interpolation: Graph verläuft exakt durch die Werte der Stützpunkte.
Approximation: Graph nähert sich den Werten der Stützpunkte an, verläuft aber nicht zwingend durch sie.

c)

Grad des Polynoms: 5
Damit: 6 Datenpunkte nötig

d)

c_0 = 0
c_1 = 2/π
c_2 = -8/3π²
c_3 = 16/6π³

p(x) = 2/π * x - 8/3π² * x (x - π/2) + 16/6π³ * x (x - π/2)(x - 3π/2)

Aufgabe 10 - Bézier-Kurven

a)

(55/2, 44)^T

b)

c)

d)

  • Bézier-Kurven liegt in der konvexen Hülle
  • Variationsreduzierend
  • In den Endpunkten tangential an das Kontroll-Polygon
  • Geht durch die Endpunkte des Kontroll-Polygons