Technische Universität München SoSe 8 Institut für Informatik Prof. Dr. Thomas Huckle Michael Rippl Fabio Gratl Numerisches Programmieren, Übungen Musterlösung 3. Übungsblatt: Gaußelimination mit Pivotsuche, LR-Zerlegung, Matrixnorm ) Gauß-Elimination und Pivotsuche a) Gauß-Elimination ohne Pivotsuche und mit exakter Arithmetik: ( ) ( ) x = =.9995..., x = (x ) =.4997... ( ).4997... x =..9995... b) Gauß-Elimination ohne Pivotsuche und mit Rundungsfehlern (3 Stellen): ( ) ( ). 3. 3. 3 ( ). 3. 3. 3 ( ) x =. Runden Der zweite Eintrag x ist in Ordnung, aber x ist komplett falsch! c) Gauß-Elimination mit Pivotsuche und mit Rundungsfehlern (3 Stellen): ( ) ( ) ( ) ( ) Runden x =, x = x / =.5 ( ).5 x =. Diesmal ist x für beide Einträge in der passen Größenordnung (vgl. i)).
) LR-Zerlegung Zunächst folgt eine kleine Einführung zur LR-Zerlegung. Zuerst wird die Matrix A in ein Produkt zweier Matrizen zerlegt, einmal in die linke untere Dreiecksmatrix L mit -ern auf der Diagonalen, und die rechte obere Dreiecksmatrix R. Daraufhin wird mit der Vorwärts- und der Rückwärtssubstitution das lineare Gleichungssystem gelöst. Eine mögliche Umsetzung der drei Abschnitte in Pseudocode sieht folgermaßen aus:. LR-Zerlegung: A = LR for i =:n % Fuer j e d e Z e i l e i for k=: i % Berechne Elemente L [ i, k ] L [ i, k ] := A[ i, k ] ; for j =:k L [ i, k ] := L [ i, k] L [ i, j ] R[ j, k ] ; L [ i, k ] := L [ i, k ] /R[ k, k ] ; for k=i : n % Berechne Elemente R[ i, k ] R[ i, k ] := A[ i, k ] ; for j =: i R[ i, k ] := R[ i, k] L [ i, j ] R[ j, k ] ;. Vorwärtssubstitution: Ly = b for i =:n y [ i ] := b [ i ] ; for j =: i y [ i ] := y [ i ] L [ i, j ] y [ j ] ; 3. Rückwärtssubstitution: Rx = y for i=n: : x [ i ] := y [ i ] ; for j=i +:n x [ i ] := x [ i ] R[ i, j ] x [ j ] ; x [ i ] := x [ i ] /R[ i, i ] ; Die Grundidee ist für die Algorithmen Gaußelimination und LR-Zerlegung natürlich die gleiche: Bringe A durch Zeilenumformungen auf Zeilenstufenform. Der Gauß-Algorithmus eliminiert sukzessive Einträge in einer Spalte i (äußere Schleife), geht also spaltenweise vor. Dagegen berechnet unser LR-Algorithmus für jedes i der äußeren Schleife die Einträge von L und R in der Zeile i; er arbeitet also zeilenweise. Die zweite Schleife über k läuft dementsprech über
die nötigen Spaltenindizes von L und R. Um zu verstehen, warum der LR-Algorithmus die angegebene Form hat, betrachten wir die Zerlegung genauer. A = L R bedeutet in Indexnotation A ik = n L ij R jk, j= i, k =,..., n wobei n die Dimension der Matrix A ist. Die Einträge A ik können in solche unterhalb bzw. oberhalb der Diagonalen aufgesplittet und getrennt betrachtet werden. i > k: Einträge unterhalb der Diagonalen: Zeile mal Spalte im Produkt L R ergibt aufgrund der Nullen eine Summe, die nur bis k läuft (kleinerer der beiden Indizes): A ik = n L ij R jk = j= L ik = k L ij R jk = j= k L ij R jk + L ik R kk j= ( ) k A ik L ij R jk /R kk. j= i k: Einträge oberhalb der Diagonalen: Die Summe läuft nur bis i (kleinerer der beiden Indizes): A ik = n L ij R jk = j= R ik = i L ij R jk = j= i L ij R jk + L ii R ik j= ( ) i A ik L ij R jk / L ii. }{{} j= = Damit erhalten wir exakt die Formeln der LR-Zerlegung aus dem angegebenen Algorithmus. Man macht sich leicht klar, dass aufgrund des zeilenweisen Durchlaufs der äußeren Schleife (über i) stets alle nötigen Werte schon vorhanden sind, um die neuen Einträge L ik und R ik zu berechnen. a) Lösungsschritte bei Anwung von Gauß-Elimination auf das Problem Ax = b.. 5 3 5 / / / 5/ 3. 4. x = 4 3 5 / / 3 4 3
b) Für die Berechnung der Zerlegung (.) von A = stellen wir zwei Möglichkeiten zur Verfügung: Die erste basiert auf den Algorithmen wie oben beschrieben und damit der Gaußelimination, die zweite auf dem Lösen von Gleichungen aus der Gleichung A = LR. LR-Zerlegung basier auf Gaußelimination Die Matrizen L und R denken wir uns mit lauter Nulleinträgen vorbelegt. Neu hinzukomme Einträge werden mit einer Box gekennzeichnet. i=: L : for k = : nichts zu tun (empty) R : for k = : 3 R[, k] = A[, k]; for j = : empty R = i=: L : for k = : R : for k = : 3 L[, ] = A[, ] = ; for j = : empty L[, ] = L[, ]/R[, ] = /4; L = R[, k] = A[, k]; for j = : R[, k] = R[, k] L[, ] R[, k]; / k = : R[, ] = R[, ] L[, ] R[, ] = / = ; k = 3 : R[, 3] = R[, 3] L[, ] R[, 3] = / 3 = /; R = -/
i=3: L : for k = : L[3, k] = A[3, k]; R : for k = 3 : 3 for j = : k k = : empty k = : L[3, ] = L[3, ] L[3, ] R[, ] = ; L[3, k] = L[3, k]/r[k, k]; L = / / R[3, 3] = A[3, 3]; for j = : R[3, 3] = R[3, 3] L[3, j] R[j, 3]; j = : R[3, 3] = / 3 = /; j = : R[3, 3] = / ( /); R = / Damit haben wir unsere gesuchte Zerlegung: A = L R = / / /.
Wir beginnen mit allen uns be- LR-Zerlegung basier auf Matrixmultiplikation kannten Informationen über die LR-Zerlegung von A: = Wir sehen 9 Unbekannte auf der rechten Seite, und für jeden der 9 Einträge in A entsteht eine Gleichung. Diese Gleichungen werden wir nun nacheinander (von oben nach unten oder von links nach rechts) durchgehen, und jedes Mal nach der fehlen Unbekannten auflösen. Beginnen wir mit dem Feld (, ):. =. Es gilt: A = 4! = R + + R = 4. Das Gleiche machen wir mit Feld (,): und damit = 4 A =! = L 4 + + L =. Verfolgen wir dieses Vorgehen weiter, erhalten und lösen wir nacheinander folge Gleichungen: (, ) 4 = R R = 4 (, ) = L 4 L = (3, ) = L 3 4 L 3 = (, ) = R R = (, ) = + R R = (3, ) = + L 3 L 3 = (, 3) 3 = R 3 R 3 = 3 (, 3) (3, 3) = 3 + R 3 = 3 + + R 33 R 3 = R 33 = Damit ergibt sich dann die selbe Lösung wie oben.
c) Substitution: Vorwärtssubstitution Ly = b: / / y y y 3 Rückwärtssubstitution Rx = y: / = x x x 3 5 3 y = (5, /, 3) T. = 5 / 3 x = (, 4, 3) T. d) Die Zerlegung ist bereits bekannt, daher müssen zur Lösung von Ax = c lediglich Vorwärts- und Rückwärtssubstitution durchgeführt werden. Der Aufwand hierfür ist O(n ) Operationen (vergleiche O(n 3 ) Operationen für die Berechnung der Zerlegung bei der Lösung von Ax = b). Substitution: Vorwärtssubstitution Lỹ = c: / / Rückwärtssubstitution Rx = ỹ: / x x x 3 y y y 3 = = ỹ = (,, ) T. x = ( /, /, ) T.
3) Matrixnorm a) D d jj. Sei e j der Vektor mit an der Stelle j und an alle andere Stellen:. e j =. j. e j ist ein Eigenvektor zu Eigenwert d jj : De j = d jj e j. Dann: Dx D = sup De j x x e j = d jje j = d jj e j = d jj b) D d jj : Dx D = sup x x = sup x sup x = sup x = sup d jj x = d jj. x d + x d +... + x nd nn x +... + x n x d jj + x d jj +... + x nd jj x +... + x n x +... + x n d jj x +... + x n Zum Schluss: D d jj, D d jj, dann muss D = d jj gelten.
4) Orthogonale Matrizen a) det Q = ±: = det I = det(qq T ) = det Q det Q T = (det Q). Die Gleichung x = hat nur ± als Lösungen. b) Q = : Qx Q = sup x x = sup x xt Q T Qx xt x = sup x xt Ix xt x = sup xt x x xt x = sup = x Zusatz:.5 det(d) = det(d) = - D = orthogonale.5 d -.5 - -.5 - - -.5 - -.5.5.5 d Unter diagonale Matrizen gibt es 4 orthogonale: ( ) ( ) ( ) ( ),,,.
Zusatzaufgabe: Image Stitching mit Gauß-Elimination Gegeben seien zwei Merkmalpunkte x = [3 ] T und x = [4 3] T im Bild I und deren korrespondiere Punkte x = [ ] T und x = [ 4] T im anderen Bild I. Wie bereits erwähnt, lässt sich der Zusammenhang zwischen korrespondieren Punkten über die Transformation x = H x ausdrücken. Nun gilt es die Einträge der Homography-Matrix zu finden. Notieren wir zunächst den bekannten Zusammenhang für das erste Paar korrespondierer Punkte: x ( ) = H ( x ) ( ) h h = 3 h h x ( ) 4 = H ( x ) h h = h h ( ) 4 3 Nach der Matrix-Vektor-Multiplikation erhalten wir ein System mit vier Gleichungen mit den vier Unbekannten h, h, h, h. 3h + h = 3h + h = 4h + 3h = 4h + 3h = 4 Durch Tauschen der zweiten und dritten Gleichung erhalten wir das folge (lineare) Gleichungssystem, das wir mittels Gauß-Elimination lösen: 3 h 3 A h = b 4 3 h 3 h = 4 3 3 4 3 h 4 4 3 4 Die Gauß-Elimination erfolgt wie folgt: 3 4 3 3 4 3 4 / 4 3 3 3 3 3 / 4 3 4 3 4 3 3 3 3 4 3 3 Damit lässt sich leicht h = 4, h =, h =, h = berechnen.
Weiterer Lösungsweg: Hx = x und Hx = x lässt sich schreiben als H [ ] [ ] x x = x x T [ ] [ ] T T x H T x = Gauß : und damit folgt die Lösung H = x T x T ( ) ( ) 3 H T = 4 3 4 ( ) ( ) 3 3 4 3 4 ( ). 4 H T = 4 ( 4 ),