2009-01-07 31 views
13

Ich versuche einige grundlegende lineare Algebra Operationen zu implementieren und eine dieser Operationen ist die Inversion einer dreieckigen (oberen und/oder unteren) Matrix. Gibt es dafür einen einfachen und stabilen Algorithmus?Gibt es eine einfache Möglichkeit, eine dreieckige (obere oder untere) Matrix umzukehren?

Vielen Dank.

+0

Werfen Sie einen Blick auf diesen Beitrag: http://math.stackexchange.com/questions/1143214/method-to-find-the-inverse-of-any-lower-triangular-matrix Besten – Dade

Antwort

14

Ja, verwenden Sie back substitution. Ein Standardalgorithmus zum Invertieren einer Matrix besteht darin, ihre LU-Zerlegung zu finden (Zerlegung in eine untere Dreiecksmatrix und eine obere Dreiecksmatrix), Rückersatz an den Dreiecksstücken zu verwenden und dann die Ergebnisse zu kombinieren, um das Inverse der ursprünglichen Matrix zu erhalten.

+0

Ich versuche, die Umkehrung einer * dreieckigen * Matrix, nicht eine quadratische Matrix zu erhalten. Wie kann die Rückersetzung mir helfen, die Inverse der Triangulars zu erhalten? – tunnuz

+8

Per Definition sind Dreiecksmatrizen quadratisch. – jason

+0

Darüber hinaus haben nur quadratische Matrizen Inversen. – conjectures

1

Wenn Sie über Single-Precision-Reals sprechen, sehen Sie sich den Quellcode für die LAPACK-Routinen STRTRI und STRTI2 an.

0

Wow, das ist praktisch die Hälfte der Inhalte einer numerischen Analyse natürlich. Die Standardalgorithmen werden es tun, und es gibt eine Reihe von vordefinierten Code here. Die ultimative Quelle für dieses und die meisten anderen üblichen numerischen Analyseprobleme ist Numerical Recipes.

+1

Das Invertieren einer Dreiecksmatrix ist nicht der halbe Inhalt eines Kurses in der numerischen Analyse. Das Invertieren einer Dreiecksmatrix ist trivial und der naive Algorithmus ist stabil. – jason

+1

Muss die Reihe schwenken. Naiv wird nicht stabil sein. – duffymo

+2

Das Schwenken (zB durch Gaußsche Eliminierung) bringt ein lineares System in eine Dreiecksform, die dann mit einer Backsubstitution gelöst wird. Zur Stabilität siehe zum Beispiel das Buch Genauigkeit und Stabilität numerischer Algorithmen von Nicholas Higham, Seite 140 der zweiten Ausgabe. – jason

3

Gegeben eine untere Dreiecksmatrix L, Backsubstitution ermöglicht es Ihnen, das System L x = b schnell für jede rechte Seite b zu lösen.

Um L zu invertieren, können Sie dieses System für die rechten Seiten lösen. E1 = (1,0, ..., 0), e2 = (0,1, ..., 0), ..., en = (0,0, ..., 1) und kombiniere die resultierenden Lösungsvektoren zu einer einzigen (notwendigerweise niedriger dreieckigen) Matrix.

Wenn Sie an einer geschlossenen Lösung interessiert sind, sind die diagonalen Elemente des Inversen die Inversen der ursprünglichen diagonalen Elemente, und die Formel für den Rest der Elemente des Inversen wird immer komplizierter, wenn Sie sich bewegen immer aus der Diagonalen.

5

Nicht invertieren, wenn Sie können. Es ist eines der grundlegenden Gebote der numerischen linearen Algebra.

Es ist viel schneller und numerisch stabiler, die Matrix L selbst im Speicher zu halten und

inv(L)b
mit Rückersatz zu berechnen, wann immer Sie etwas anderes mit inv (L) machen müssen.

Beachten Sie, dass der übliche Algorithmus zum Invertieren der Systeme

inv(L)[1 0 0 ...], 
inv(L)[0 1 0 ....], 
inv(L)[0 0 1 ....]
und so weiter zu lösen, so dass Sie sehen, es ist viel einfacher, es überhaupt nicht zu invertieren.