===== Forendiskussionen =====
* [[https://fsi.informatik.uni-erlangen.de/forum/thread/8047-Loesungsversuch-15-Februar-2011]] Gesamte Klausur
===== 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 - Interpolation ====
**a)**
l(x) = { 0 für 0 <= x < 1
{ 12x - 12 für 1 <= x < 2
{ 60x - 108 für 2 <= x < 3
**b)**
Koeffizienten \\
c0 = 0, c1 = 0, c2 = 6, c3 = 6
Polynom: \\
a(x) = 6x³ - 12x² + 6x
**c)**
|1 0 0 0 |
|1 1 0 0 |
|1 2 2 0 |
|1 3 6 6 |
**d)**
Die Systemmatrix A ist eine untere Dreiecksmatrix und lässt sich einfach durch Vorwärtseinsetzen lösen.
==== Aufgabe 3 - LU-Zerlegung ====
**a)**
|1 0 0 0|
L = |2 1 0 0|
|0 3 1 0|
|0 0 2 1|
|2 1 4 1|
U = |0 1 1 1|
|0 0 2 1|
|0 0 0 3|
**b)**
x = (-3, 1, 4)^T
==== Aufgabe 4 - Eigenschaften von Bézier-Kurven ====
**a)**
* Affine Invarianz
* Bézier-Kurven liegt in der konvexen Hülle
* Variationsreduzierend
* In den Endpunkten tangential an das Kontroll-Polygon
**b)**
...
**c)**
...
==== Aufgabe 5 - Baryzentrische Koordinaten ====
**a)**
Fläche im spitzen Winkel bei T
**b)**
Halbgerade RS links von R (exklusiv)
**c)**
Punkt T
**d)**
P0: Auf 2/3 der Strecke von R nach S \\
P1: Relativ mittig im Dreieck, leicht in Richtung T bzw. der Strecke TS versetzt \\
P2: Existiert nicht (Summe ergibt 0 statt 1)
**e)**
ρ = -2 \\
σ = 1 \\
τ = 2
==== Aufgabe 6 - Singulärwertzerlegung ====
**a)**
Singulärwerte: 3/2, 3/4, 1/2 \\
Rang: r = 3 \\
Bild: span{(-1/3 -2/3 -2/3)^T, (-2/3 2/3 -1/3)^T, (-2/3 -1/3 2/3)^T} \\
Kern: span{(1/2 -1/2 -1/2 1/2)^T} \\
Konditionszahl: 6/4 * 4/2 = 3
**b)**
(-14 -4 4 14)^T
**c)**
|1 1 1 1|
-1/4 x |2 2 2 2|
|2 2 2 2|
==== Aufgabe 7 - Programmierung ====
**a)**
BezierCurve::BezierCurve(const Point* CPs, int numCPs) {
this-numCPs = numCPs;
this->CPs = new Point[numCPs];
for(int i = 0; i < numCPs; i++) {
this->CPs[i] = CPs[i];
}
}
BezierCurve::~BezierCurve() {
delete[] CPs;
}
**b)**
void BezierCurve::removeControlPoint(int idx) {
Points* newCPs = new Point[numCPs - 1];
for(int i = 0; i < numCPs; i++) {
if(i < idx)
newCPs[i] = CPs[i];
if(i > idx) {
newCP[i - 1] = CPs[i];
}
delete[] CPs;
CPs = newCPs;
this-numCPs = numCPs - 1;
}
**c)**
Point BezierCurve::desCastlejau(float t) const {
Point tmpCPs[numCPs];
for(int i = 0; i < numCPs; i++)
tmpCPs[i] = CPs[i];
for(int c = 1; c < numCPs; c++) {
for(int r = 0; r < numCPs, numCPs - c; r++) {
tmpCPs[r] = (1-t) * tmpCPs[r] + t * tmpCPs[r + 1];
}
}
return tmpCPs[0];
}
**d)**
void BezierCurve::degreeElevation() {
Point* newCPs = new Point[numCPs + 1];
newArr[0] = CPs[0];
newArr[numCPs] = CPs[numCPs - 1];
for(int i = 1; i < numCPs; i++) {
float t = i / (numCPs + 1);
float z = (numCPs + 1 - i) / (numCPs + 1);
newArr[i] = t * CPs[i - 1] + z * CPs[i];
}
delete[] CPs;
CPs = newArr;
numCPs++;
}
**e)**
void BezierCurve::reflectCurve(const Point& p) {
for(int i = 0; i < numCPs; i++)
CPs[i] = 2 * p - CPs[i];
}
**c)**
==== Aufgabe 8 - Numerische Integration ====
**a)** 20
**b)** 17
**c)** 16
**d)** 16
**e)** 16
**f)** O(h²)
**g)** O(h^4)
==== Aufgabe 9 - Matrix-Norm und Kondition ====
**a)**
Das Problem ist für Funktion g(x) besser konditioniert, da die Tangente bei x = 1 eine geringere Steigung aufweist: \\
K(f) = π \\
K(g) = 1/π \\
g hat die kleinere Konditionszahl.
**b)**
7, 5, 19, 24, 6, 6
**c)**
mit 1-Norm: \\
K(A_1) = 49/25 \\
K(A_3) = 24
**d)**
Die Geraden von SP_1 stehen fast senkrecht aufeinander. \\
Die Geraden von SP_2 verlaufen relativ parallel. \\
Damit ist SP_1 besser konditioniert.
==== Aufgabe 10 - Nullstellensuche ====
**a)**
...
**b)**
x_2 = 1/2 \\
x_3 = -7
**c)**
(-4, 3)^T