Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Lineare Gleichungssysteme

a1,1x1++a1,nxn=b1am,1x1++am,nxn=bm{\begin{align} a_{1,1}\,x_1+\cdots+a_{1,n}\,x_n&=b_1\\ &\vdots\\ a_{m,1}\,x_1+\cdots+a_{m,n}\,x_n&=b_m \end{align}}

entstehen in allen Bereichen der Wissenschaft, entweder direkt zur Formulierung eines praktischen Problems oder als Teilschritt innerhalb komplexerer Lösungsstrategien (vgl. auch Veranstaltung zum wissenschaftlichen Rechnen). Dabei sind die Zahlen ai,ja_{i,j} und bib_i gegeben und die Zahlen x1,,xnx_1,\ldots,x_n gesucht.

Zur Vereinfachung der Darstellung setzt man üblicherweise die Systemmatrix

A:=[a1,1a1,nam,1am,n]Rm×nA:=\begin{bmatrix}a_{1,1}&\cdots&a_{1,n}\\\vdots&&\vdots\\a_{m,1}&\cdots&a_{m,n}\end{bmatrix}\in\bbR^{m\times n}

und den Vektor der rechten Seiten

b:=[b1bm].b:=\begin{bmatrix}b_1\\\vdots\\b_m\end{bmatrix}.

Das Gleichungssystem bekommt damit die Form

Ax=bA\,x=b

mit dem Lösungsvektor

x:=[x1xn].x:=\begin{bmatrix}x_1\\\vdots\\x_n\end{bmatrix}.

Es existieren vielfältige numerische Lösungsverfahren mit unterschiedlichen Eigenschaften bzgl. Stabilität, Rechenaufwand, Speicherbedarf und Anwendungsbreite. Schauen uns hier zwei relativ breit anwendbare Verfahren näher an und geben einen kurzen Überblick über weitere Verfahrensideen.

Beschränken uns hier auf invertierbare quadratische Systemmatrizen, also auf den Fall m=nm=n. Insbesondere folgt aus der Forderung der Invertierbarkeit, dass das Gleichungssystem genau eine Lösung besitzen soll. Diese kann dann als

x=A1bx=A^{-1}\,b

geschrieben werden. Erst im nächsten Kapitel gehen wir auf den allgemeinen Fall ein.

6.1Kondition

Zur Beurteilung der Kondition beim Lösen eines linearen Gleichungssystems muss zunächst geklärt werden, welche Größen als (potentiell fehlerbehaftete) Eingabe zu betrachten sind. Hier gibt es zwei Ansätze:

Weiterhin bestehen gewisse Freiheiten bei der Beantwortung der Frage, wie wir Abweichungen zwischen exakten und fehlerbehafteten Ein- bzw. Ausgaben ausdrücken. Bisher haben wir Konditionsbetrachtungen nur für Abbildungen f:RdRf:\bbR^d\to\bbR angestellt. Auf der Eingabeseite hatten wir uns für die Summe der komponentenweisen relativen Fehler entschieden. Auf der Ausgabeseite bestand gar keine Wahl. Im Kontext linearer Gleichungssysteme muss nun auch auf der Ausgabeseite entschieden werden, wie die relativen Fehler in den einzelnen Komponenten zu einem Gesamtausgabefehler zusammengeführt werden.

6.1.1Vektornormen

Für einen Vektor vRnv\in\bbR^n, z.B. den Vektor der komponentenweisen relativen Ein- oder Ausgabefehler, können wir verschiedene Normen einführen, also Zahlen v\|v\|, die die Größe der einzelnen Einträge des Vektors sinnvoll zusammenfassen. Unter “sinnvoll” verstehen wir, dass folgende Eigenschaften gelten sollten:

Beispiele:

Alle Normen in Rn\bbR^n sind äquivalent, d.h. für zwei Normen a\|\cdot\|_a und b\|\cdot\|_b gibt es stets Konstanten c,C>0c,C>0, sodass

cvavbCvafu¨r alle vRnc\,\|v\|_a\leq\|v\|_b\leq C\,\|v\|_a\quad\text{für alle }v\in\bbR^n

gilt. Mit Blick auf Fehlerabschätzungen beeinflussen die eingesetzten Normen also höchstens die auftretenden konstanten Faktoren, die ohnehin kaum relevant für die Kernaussagen sind.

6.1.2Matrixnormen

Bei Konditionsuntersuchungen werden wir stets auf Vektoren der Form AxA\,x und A1bA^{-1}\,b stoßen, die wir in Beziehung zu xx bzw. bb setzen möchten. Zu diesem Zweck haben sich von einer Vektornorm induzierte Matrixnormen etabliert.

Am häufigsten anzutreffen ist die Spektralnorm, die entsteht, wenn für beide Vektornormen die euklidische Norm genutzt wird:

A2:=maxvRn{0}Av2v2.\|A\|_2:=\max_{v\in\bbR^n\setminus\{0\}}\frac{\|A\,v\|_2}{\|v\|_2}.

Die Spektralnorm ist von der gelegentlich auch verwendeten Fobenius-Norm

AF=i=1mj=1nai,j2\|A\|_\rmF=\sum_{i=1}^m\sum_{j=1}^n a_{i,j}^2

zu unterscheiden, welche nicht durch Vektornormen induziert wird, aber dennoch die vier Normbedingungen erfüllt.

Die von der 1-Norm oder der \infty-Norm induzierten Matrixnormen spielen nur selten eine Rolle, sind aber deutlich einfacher zu berechnen als die Spektralnorm. Für die 1-Norm erhalten wir

A1=maxj{1,,n}i=1mai,j\|A\|_1=\max_{j\in\{1,\ldots,n\}}\sum_{i=1}^m|a_{i,j}|

(IDVID 613). Die \infty-Norm liefert

A=maxi{1,,m}j=1nai,j\|A\|_\infty=\max_{i\in\{1,\ldots,m\}}\sum_{j=1}^n|a_{i,j}|

(IDVID 617).

Analog zu den Vektornormen sind auch alle Matrixnormen zu einander äquivalent.

6.1.3Fehlerhafte rechte Seite (Konditionszahl)

Betrachten wir nur bb als Eingabe, so erhalten wir für den relativen Ausgabefehler bei fehlerhafteteter Eingabe b~\tilde{b} die Abschätzung

A1bA1b~A1bAA1bb~b,\frac{\|A^{-1}\,b-A^{-1}\,\tilde{b}\|}{\|A^{-1}\,b\|}\leq\|A\|\,\|A^{-1}\|\,\frac{\|b-\tilde{b}\|}{\|b\|},

wobei die verwendeten Matrix- und Vektornormen kompatibel zu einander sein sollen, ansonsten aber beliebig gewählt werden können (IDVID 620).

Beachte, dass beim bisherigen Konditionsbegriff für Abbildungen nach R\bbR (statt Rn\bbR^n) der Eingabefehler gerade die 1-Norm des Vektors der komponentenweisen relativen Fehler war. Im Kontext linearer Gleichungssysteme ist jedoch die Norm des Vektors der absoluten Fehler geteilt durch die Norm des exakten Eingabevektors als Ausdruck des relativen Eingabefehlers besser handhabbar. Auf der Ausgabeseite wird die gleiche Variante zur beschreibung des relativen Ausgabefehlers verwendet.

Je nach Wahl der Matrixnorm entstehen unterschiedlich Zahlen κ1(A)\kappa_1(A), κ2(A)\kappa_2(A), κ(A)\kappa_\infty(A). Wenn im Folgenden kein Index angegeben ist, gelten die Resulte für alle Matrixnormen.

Es gilt stets

κ(A)=maxx=1Axminx=1Ax1\kappa(A)=\frac{\max\limits_{\|x\|=1}\|A\,x\|}{\min\limits_{\|x\|=1}\|A\,x\|}\geq 1

(IDVID 625).

Für die euklidische Matrixnorm kann man noch

κ2(A)=λmaxλmin\kappa_2(A)=\sqrt{\frac{\lambda_{\mathrm{max}}}{\lambda_{\mathrm{min}}}}

zeigen (tun wir aber nicht), wobei λmax\lambda_{\mathrm{max}} und λmin\lambda_{\mathrm{min}} der größte und der kleinste Eigenwert von AA sind.

6.1.4Fehlerhafte Matrix und rechte Seite

Untersuchen noch die Kondition der der Abbildung (A,b)A1b(A,b)\mapsto A^{-1}\,b bei fehlerbehafteter Matrix A~\tilde{A} und fehlerbehafteter rechter Seite b~\tilde{b}. Hier muss zunächst geklärt werden, unter welchen Bedingungen A~\tilde{A} überhaupt noch invertierbar ist.

Für den Fehlerzusammenhang zwischen Eingabe und Ausgabe erhält man dann

A1bA~1b~A1bκ(A)1AA~Aκ(A)(AA~A+bb~b)\frac{\|A^{-1}\,b-\tilde{A}^{-1}\,\tilde{b}\|}{\|A^{-1}\,b\|} \leq\frac{\kappa(A)}{1-\frac{\|A-\tilde{A}\|}{\|A\|}\,\kappa(A)}\,\left(\frac{\|A-\tilde{A}\|}{\|A\|}+\frac{\|b-\tilde{b}\|}{\|b\|}\right)

(IDVID 635), wobei Matrix- und Vektornormen wieder kompatibel zu einander sein sollen. Bei kleinem Fehler in AA und nicht zu großer Kondition κ(A)\kappa(A) beschreibt also auch hier κ(A)\kappa(A) die Fehlerverstärkung.

6.1.5Beispiele

6.1.5.1Einheitsmatrix

Für

A=[1000010000100001]A=\begin{bmatrix} 1&0&\cdots&0&0\\ 0&1&&0&0\\ \vdots&&\ddots&&\vdots\\ 0&0&&1&0\\ 0&0&\cdots&0&1 \end{bmatrix}

gilt A=A1A=A^{-1} und A=1=A1\|A\|=1=\|A^{-1}\|, also κ(A)=1\kappa(A)=1.

6.1.5.2Hilbert-Matrix

Für

A=[112131n1213131n+11314151n+21n1n+11n+212n1]A=\begin{bmatrix} 1&\frac{1}{2}&\frac{1}{3}&\cdots&\frac{1}{n}\\ \frac{1}{2}&\frac{1}{3}&\frac{1}{3}&\cdots&\frac{1}{n+1}\\ \frac{1}{3}&\frac{1}{4}&\frac{1}{5}&\cdots&\frac{1}{n+2}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ \frac{1}{n}&\frac{1}{n+1}&\frac{1}{n+2}&\cdots&\frac{1}{2\,n-1}\\ \end{bmatrix}

wächst κ(A)\kappa(A) exponentiell mit nn, siehe The Condition of the Finite Segments of the Hilbert Matrix und Praktikum.

6.2Wie es nicht geht

Für ARn×nA\in\bbR^{n\times n} kann die Lösung xx des Gleichungssystems mit der Cramer’schen Regel ermittelt werden: Zur Berechnung von xix_i sei AiA_{i} wie AA, aber mit Spalte ii ersetzt durch die rechte Seite bb. Dann gilt

xi=detAidetA,x_i=\frac{\det A_i}{\det A},

wobei

detA=σ(sgnσ)i=1nai,σ(i).\det A=\sum_{\sigma}(\sgn\sigma)\,\prod_{i=1}^n a_{i,\sigma(i)}.

die Determinate von AA ist (analog für AiA_i). Die Summe läuft hier über alle Permutationen σ:{1,,n}{1,,n}\sigma:\{1,\ldots,n\}\to\{1,\ldots,n\}, also alle möglichen Anordnungen der Zahlen 1,,n1,\ldots,n. Der Wert sgnσ\sgn\sigma ist das Vorzeichen der Permutation und ist entweder 1 oder -1.

Der Aufwand für das berechnen von Determinanten ist enorm! Er liegt bei n!n! Additionen und (n1)n!(n-1)\,n! Multiplikationen pro Determinanten. Für das Lösen eines Gleichungssystems werden n+1n+1 Determinanten benötigt. Für n=20n=20 würde ein 1-Peta-FLOPS-Rechner mehr als 11 Tage für das Lösen mittels Cramer’scher Regel benötigen benötigen.

Zusätzlich sind auf der Cramer’schen Regel beruhende Algorithmen durch die vielen Differenzen als instabil anzusehen.

Auch das explizite Berechnen der Inverse A1A^{-1}, um dann x=A1bx=A^{-1}\,b zu bekommen, ist im Allgemeinen aufwendiger als das Lösen des Gleichungssystems ohne Verwendung der Inverse. Der Rechenaufwand für den unten behandelten Gauß-Algorithmus entspricht zwar dem des Invertierens (etwa n3n^3 Grundoperationen), der Gauß-Algorithmus ist aber stabiler. Praktisch auftretende Gleichungssysteme haben meist beim Lösen vorteilhaft nutzbare Zusatzeigenschaften (symmetrisch, dünn besetzt, Bandstruktur,...), die den Einsatz schnellerer und speichersparenderer Algorithmen zulassen. So ist beispielsweise die im Allgemeinen vollbesetzte Inverse von großen Tridiagonalmatrizen, wie sie häufig in der Praxis auftreten (vgl. Veranstaltung zum wissenschaftlichen Rechnen), viel zu groß um sie überhaupt im Arbeitsspeicher ablegen zu können.

Grundsätzlich gilt: Inverse verweiden. Ausnahmen sind sehr kleine, gut konditionierte Gleichungssysteme, die für viele verschiedene rechte Seiten zu lösen sind (z.B. Koordinatentransformationen in der Computergrafik).

6.3Gauß-Algorithmus

6.3.1Idee

Die LR-Zerlegung von AA kann mittels Gauß-Algorithmus (siehe unten) bestimmt werden. Liegt diese vor, so erfolgt das Lösen des Gleichungssystems durch Vorwärtssubstitution und anschließende Rückwärtssubstitution:

  1. Löse Ly=bL\,y=b; dazu setze y1:=b1y_1:=b_1 und wiederhole für i=2,,ni=2,\ldots,n:

    1. yi:=bij=1i1li,jyj\displaystyle y_i:=b_i-\sum_{j=1}^{i-1} l_{i,j}\,y_j.

  2. Löse Rx=yR\,x=y; dazu setze xn:=ynrn,nx_n:=\frac{y_n}{r_{n,n}} und wiederhole für i=n1,n2,,1i=n-1,n-2,\ldots,1:

    1. xi:=1ri,i(yij=i+1nri,jxj)\displaystyle x_i:=\frac{1}{r_{i,i}}\,\left(y_i-\sum_{j=i+1}^n r_{i,j}\,x_j\right).

6.3.2LR-Zerlegung

Sei Ei,jRn×nE_{i,j}\in\bbR^{n\times n} die Matrix, die in Zeile ii und Spalte jj eine 1 hat und sonst nur Nullen, und sei IRn×nI\in\bbR^{n\times n} die Einheitsmatrix. Für cRc\in\bbR setzen wir

Mi,j(c):=I+cEi,j.M_{i,j}(c):=I+c\,E_{i,j}.

Dann entsteht das Produkt Mi,j(c)AM_{i,j}(c)\,A aus AA indem Zeile jj von AA mit cc multipliziert und zu Zeile ii von AA addiert wird. Umgekehrt wird bei AMi,j(c)A\,M_{i,j}(c) gerade Spalte ii mit cc multipliziert und zu Spalte jj addiert. Offensichtlich gilt Mi,j(c)1=Mi,j(c)M_{i,j}(c)^{-1}=M_{i,j}(-c).

Mit diesen Matrizen beschreiben wir nun den Algorithmus zum Erhalt der LR-Zerlegung. Dieser erzeugt von der Matrix AA ausgehend spaltenweise Nullen unterhalb der Diagonale, indem geeignete Vielfache einer Zeile von den darunter liegenden Zeilen abgezogen werden:

  1. Setze L:=IL:=I und R:=AR:=A.

  2. Wiederhole für j=1,,n1j=1,\ldots,n-1:

    1. Wiederhole für i=j+1,,ni=j+1,\ldots,n:

      1. Setze c:=ri,jrj,jc:=\frac{r_{i,j}}{r_{j,j}}.

      2. Setze L:=LMi,j(c)L:=L\,M_{i,j}(c).

      3. Setze R:=Mi,j(c)RR:=M_{i,j}(-c)\,R.

Das Produkt LRL\,R verändert sich im Laufe der Iteration nicht, bleibt also beim initialen LR=AL\,R=A. Die Zahlen cc sind gerade so gewählt, dass RR zu einer oberen Dreiecksmatrix wird. Wegen i>ji>j bleiben die Diagonaleinträge und das obere Dreieck von LL unverändert.

6.3.3Stabilität

Ist x~\tilde{x} die mittels Gauß-Algorithmus aus exakten Eingaben AA und bb numerisch ermittelte und somit (rundungs-)fehlerbehaftete Lösung, so haben wir im Sinne der Rückwärtsanalyse

x~=A1b^mit b^=Ax~.\tilde{x}=A^{-1}\,\hat{b}\quad\text{mit }\hat{b}=A\,\tilde{x}.

Liegt der relative Fehler zwischen bb und Ax~A\,\tilde{x} im Bereich des erwarteten Eingabefehlers, so ist der Algorithmus stabil. Die Differenz bAx~b-A\tilde{x} heißt auch Residuum.

Wie groß das Residuum ist, ist allgemein kaum zu bestimmen. Bei schlecht konditioniertem AA wird es jedenfalls groß sein, da die Rundungsfehler aus den ersten Rechenschritten analog zu Eingabefehlern verstärkt werden. Der Gauss-Algorithmus ist somit nicht als stabil anzusehen.

Ein alternative Analyse liefert, die eine Darstellung x~=A^1b\tilde{x}=\hat{A}^{-1}\,b nutzt, findet man in Fehleranalyse für die Gauß-Elimination zur Berechnung der Lösung minimaler Länge (Satz 4.5). Auch die dort erzielte Abschätzung für den Unterschied zwischen AA und A^\hat{A} liefert nicht in jedem Fall Stabilität.

Folgende Punkte fassen die Sachlage zusammen:

6.3.4Zeit- und Speicherbedarf

Rechenaufwand für die LR-Zerlegung: ca. n3n^3 Grundoperationen (IDVID 645).

Rechenaufwand für Vorwärts- und Rückwärtssubstitution: ca. n2n^2 Grundoperationen.

Der Rechenaufwand ist für große Gleichungssysteme also relativ hoch. Ist ein System für mehrere rechte Seiten zu lösen, so muss die LR-Zerlegung allerdings nur einmal berechnet werden. Das Lösen der weiteren Systeme benötigt dann nur noch n2n^2 Operationen.

Beachte: Die LR-Zerlegung kann in einer Matrix der Größe n×nn\times n gespeichert werden, da von LL nur das untere Dreieck ohne Diagonalelemente (alle 1) benötigt wird. Diese Matrix kann den Speicherbereich von AA nutzen, da RR schrittweise aus AA entsteht. Die Nicht-Null-Einträge von LL sind in jedem Schritt gerade dort, wo RR Nullen enthält. Sofern die Matrix AA nicht mehr benötigt wird, also überschrieben werden kann, benötigt der Gauß-Algorithmus also keinen zusätzlichen Speicher.

6.3.5Pivotsuche

Der Gauß-Algorithmus in der bisher vorgestellten Form hat zwei Schwächen:

Beide Probleme kann man relativ leicht beheben. Zunächst ein Beispiel für die Instabilität: Rechen mit dezimalen Gleitkommazahlen mit zweistelliger Mantisse und lösen

[1.01031.01.01.0][x1x2]=[1.02.0].{\begin{bmatrix}1.0\cdot 10^{-3}&1.0\\1.0&1.0\end{bmatrix}\,\begin{bmatrix}x_1\\x_2\end{bmatrix}=\begin{bmatrix}1.0\\2.0\end{bmatrix}}.

Bei exaktem Rechnen erhält man x1=1.001x_1=1.\overline{001} und x2=0.998x_2=0.\overline{998}, gerundet auf das genutzte Zahlenformat also x1=1.0x_1=1.0 und x2=1.0x_2=1.0. Führt man den Gauß-Algorithmus mit Runden nach jeder Operations aus, so liefert dieser x1=0.0x_1=0.0 und x2=1.0x_2=1.0 (IDVID 650), also eine grob falsche Lösung. Führt man den Algorithmus jedoch mit vertauschten Zeilen aus, so stimmt die numerische Lösung mit der gerundeten exakten Lösung überein.

Bei Gleichungssystemen ist die Reihenfolge der Gleichungen egal. Man kann also die Zeilen der Systemmatrix AA beliebig anordnen, solange man die Reihenfolge der Einträge in der rechten Seite bb entsprechend anpasst. Diese Freiheit nutzen wir zur Lösung der beiden genannten Probleme. Vor jeder neuen Iteration der äußeren Schleife bei der LR-Zerlegung sortieren wir die verbleibenden Zeilen so, dass rj,jr_{j,j} (das sogenannte Pivotelement) so groß wie möglich wird. Insbesondere ist das Pivotelement dann nie Null (sonst wäre das Gleichungssystem nicht lösbar). Aus Sicht der Stabilität ist dieses Vorgehen vorteilhaft, weil dann die Faktoren ri,jrj,j\frac{r_{i,j}}{r_{j,j}} klein sind, also Rundungsfehler aus den vorhergehenden Schritten so wenig wie möglich verstärkt werden.

Dieses Vorgehen wird Spaltenpivotsuche genannt, da nur innerhalb einer Spalte gesucht wird. Der zusätzliche Rechenaufwand liegt in der Größenordnung n2n^2 (nn-mal suchen in höchstens nn Einträgen). Zur weiteren Erhöhung der Stabilität kann auch spaltenübergreifend gesucht werden. Dann müssen ggf. Spalten von AA vertauscht werden, was einem Verändern der Reihenfolge der Einträge in xx entspricht. Der zusätzliche Rechenaufwand steigt durch den größeren Suchbereich jedoch auf ca. n3n^3, weshalb diese vollständige Pivotsuche kaum eingesetzt wird.

6.3.6Implementierung

Den Gauß-Algorithmus sollte man (heute) nicht selbst implementieren, da hochwertige Implementierung in allen gängigen Software-Biliotheken verfügbar sind. Meistens basieren diese auf LAPACK, einer sehr ausgereiften Bibliothek für lineare Algebra, die in für verschiedene Prozessorarchitekturen optimierten Versionen vorliegt.

6.4Cholesky-Verfahren

Für positiv definite symmetrische Matrizen ARn×nA\in\bbR^{n\times n} kann die LR-Zerlegung einfacher ausgedrückt und effizienter berechnet werden.

6.4.1Positiv definite Matrizen

Eine symmetrische Matrix heißt positiv definit, wenn gilt:

vTAv>0fu¨r alle vRn{0}.v^\rmT\,A\,v>0\quad\text{für alle }v\in\bbR^n\setminus\{0\}.

Positiv definite symmetrische Matrizen haben viele vorteilhafte Eigenschaften (siehe Grundlagenliteratur zur linearen Algebra):

Positiv definite symmetrische Matrizen treten in zahlreichen Anwendungen auf (vgl. Veranstaltung zum wissenschaftlichen Rechnen). Beispielsweise sind Matrizen der Form A=BTBA=B^\rmT\,B für invertierbares BRn,nB\in\bbR^{n,n} stets symmetrisch und positiv definit (IDVID 655). Solche Matrizen treten unter anderem beim Berechnen von Skalarprodukten in transformierten Koordinaten auf. BB ist dabei die Koordinatentransformation (vgl. Hauptkomponentenanalyse (“PCA”) in den Datenwissenschaften).

6.4.2Cholesky-Zerlegung

Diese sogenannte Cholesky-Zerlegung erhält man direkt aus der LR-Zerlegung, wenn man die Symmetrie A=ATA=A^\rmT ausnutzt. Insbesondere gilt R=DLrmTR=D\,L^rmT (IDVID 660).

Aus der LR-Zerlegung von AA bekommt man ohne relevante Zusatzkosten stets die Cholesky-Zerlegung. Allerdings geht es auf direktem Wege etwas schneller. Betrachten dazu die Einträge von

L=[10000l2,11000l3,1l3,2100ln1,1ln1,2ln1,310ln,1ln,2ln,3ln,n11]L=\begin{bmatrix} 1&0&0&\cdots&0&0\\ l_{2,1}&1&0&\cdots&0&0\\ l_{3,1}&l_{3,2}&1&&0&0\\ \vdots&\vdots&&\ddots&&\vdots\\ l_{n-1,1}&l_{n-1,2}&l_{n-1,3}&&1&0\\ l_{n,1}&l_{n,2}&l_{n,3}&\cdots&l_{n,n-1}&1\\ \end{bmatrix}

und von

D=[d1,10000d2,20000dn1,n10000dn,n]D=\begin{bmatrix} d_{1,1}&0&\cdots&0&0\\ 0&d_{2,2}&&0&0\\ \vdots&&\ddots&&\vdots\\ 0&0&&d_{n-1,n-1}&0\\ 0&0&\cdots&0&d_{n,n} \end{bmatrix}

als Unbekannte und lösen das nichtlineare Gleichungssystem

A=LDLT.A=L\,D\,L^\rmT.

Dieses kann explizit gelöst werden (IDVID 665). Man erhält den folgenden Lösungsalgorithmus:

6.4.3Zeit- und Speicherbedarf

Der Rechenaufwand liegt wie bei der LR-Zerlegung in der Größenordnung n3n^3, ist aber trotzdem nur etwa halb so groß oder, bei Zwischenspeichern der Produkte lj,kdk,kl_{j,k}\,d_{k,k}, sogar nur ein Viertel so groß (IDVID 670).

Der Speicherplatz des unteren Dreiecks von AA kann beim berechnen der Zerlegung mit den Einträgen von LL überschrieben werden, da alle Einträge von AA nochmal im oberen Dreieck vorhanden sind. Die Einträge von DD können auf die entsprechenden Diagonaleinträge von AA geschrieben werden, da die Diagonalelemente von AA im weiteren Verlauf nicht mehr benötigt werden. Somit benötigt das Berechnen der Cholesky-Zerlegung keinen zusätzlichen Speicherplatz. Lediglich für das eventuelle Zwischenspeichern der Produkte lj,kdk,kl_{j,k}\,d_{k,k} wird Speicherplatz in der Größenordnung n2n^2 benötigt.

6.4.4Gesamtalgorithmus

Ist die Cholesky-Zerlegung bekannt, kann das Gleichungssystem Ax=bA\,x=b analog zur LR-Zerlegung mittels Vorwärts- und anschließender Rückwärtssubstitution gelöst werden:

6.4.5Stabilität

Das Lösen von linearen Gleichungssystemen mittels Cholesky-Zerlegung ist rückwärtsstabil. Ist x~\tilde{x} die aus dem Cholesky-Verfahren resultierende (rundungsfehlerbehaftete) Lösung, so findet man eine Matrix A^\hat{A} mit x~=A^1b\tilde{x}=\hat{A}^{-1}\,b. Für diese Matrix kann man

AA^2A2cnε\frac{\|A-\hat{A}\|_2}{\|A\|_2}\leq c_n\,\varepsilon

zeigen, wobei ε\varepsilon das Maschinenepsilon ist. Die Konstante cnc_n ist meist klein und liegt nur in Ausnahmefällen in der Nähe der garantierten oberen Schranke cn4n(3n+1)c_n\leq 4\,n\,(3\,n+1) (siehe Accuracy and Stability of Numerical Algorithms (Abschnitt 10.1.1) für Herleitung und Details).

Insbesondere gilt das Cholesky-Verfahren als stabiler als der Gauss-Algorithmus. Ein günstiges Vertauschen von Zeilen im Vorfeld zur Verbesserung der Stabilität wie beim Gauss-Algorithmus ist beim Cholesky-Verfahren nicht zweckmäßig, da dadurch die Symmetrie der Matrix verloren gehen würde.

6.5Weitere Verfahren

Wir erwähnen kurz weitere Verfahrensidee um bei Bedarf mit den Begrifflichkeiten vertraut zu sein.

6.5.1QR-Zerlegung

Die LU-Zerlegung steht nur für quadratische Matrizen zur Verfügung. Für allgemeine rechteckige Matrizen ARm×nA\in\bbR^{m\times n}, mnm\geq n (überbestimmtes Gleichungssystem) kann man jedoch stets die sogenannte QR-Zerlegung A=QRA=Q\,R finden. Dabei ist RRm×nR\in\bbR^{m\times n} wieder eine obere Dreiecksmatrix, wobei die unteren mnm-n Zeilen mit Nullen aufgefüllt werden, und QRm×mQ\in\bbR{m\times m} eine orthogonale Matrix. Die Spalten von QQ sind also orthogonal zu einander und haben Länge 1. Für orthogonale Matrizen gilt stets Q1=QTQ^{-1}=Q^\rmT, sodass sich das Lösen des Gleichungssystems Ax=bA\,x=b auf Rückwärtseinsetzen und Multiplikation mit QTQ^\rmT reduziert.

Für quadratische Matrizen (m=nm=n) kann man die QR-Zerlegung mit etwa n3n^3 Grundoperationen berechnen.

6.5.2Iterative Verfahren

Iterative Verfahren liefern im Gegensatz zum Gauß-Algorithmus und zum Cholesky-Verfahren nicht die (bis auf rundungsfehler) exakte Lösung des Gleichungssystems Ax=bA\,x=b, sondern nur Näherungslösungen. Die Verfahren berechnen zunächst eine sehr grobe Näherung, die dann Schritt für Schritt verfeinert wird. Dieser Ansatz erlaubt deutlich geringere Rechenzeiten bei sehr großen Gleichungssystemen.

6.5.2.1Richardson-Iteration

Für die Lösung xx des Gleichungssystems und eine beliebige reelle Zahle τ>0\tau>0 gilt

x=xτ(Axb)=(IτA)x+τb.x=x-\tau\,(A\,x-b)=(I-\tau\,A)\,x+\tau\,b.

Dies ist eine sogenannte Fixpunktgleichung, da das Auswerten der rechten Seite wieder auf xx führt. Daraus kann man die Iterationsvorschrift

xk:=(IτA)xk1+τbx_k:=(I-\tau\,A)\,x_{k-1}+\tau\,b

ableiten. Man kann zeigen, dass für hinreichend kleines τ\tau die Folge x0:=0,x1,x2,x_0:=0,x_1,x_2,\ldots gegen die Lösung des Gleichungssystems konvergiert. Je nach gewünschter Genauigkeit kann die Iteration früher oder später abgebrochen werden.

Die Iterationsvorschrift kann zu

xk:=Mxk1+cx_k:=M\,x_{k-1}+c

verallgemeinert werden, wobei MRn×nM\in\bbR^{n\times n} und cRnc\in\bbR^n von AA und bb abhängen. So erhält man eine Vielzahl verschiedener Lösungsverfahren, die je nach Eigenschaften von AA vorteilhafte Eigenschaften wie beispielsweise besonders schnelle Konvergenz haben können. Die Konvergenz der Iterierten zur exakten Lösung ist dabei keinesfalls garantiert, sondern kann nur unter recht engen Voraussetzungen an MM und cc abgesichert werden.

6.5.2.2CG-Verfahren

Für das Verfahren der konjugierten Gradienten (kurz: CG-Verfahren, CG = conjugate gradients) wird das Gleichungssystem durch das Minimierungsproblem

J(x):=12xTAxxTbminxRnJ(x):=\frac{1}{2}\,x^\rmT\,A\,x-x^\rmT\,b\to\min_{x\in\bbR^n}

ersetzt. Man kann zeigen, dass die Lösung des Minimierungsproblems mit der Lösung des Gleichungssystems übereinstimmt.

Nur Lösung des Minimierungsproblems stehen eine vielzahl numerischer Optimierungsverfahren zur Verfügung. Das einfachste ist das sogenannte Gradienten-Verfahren, welches, beginnend an einem Punkt x0x_0, den Gradient J\nabla J der Zielfunktion JJ berechnet und dann die aktuelle Position in Richtung des negativen Gradienten (Richtung des steilsten Abstiegs!) verändert:

xk:=xk1skJ(xk1).x_k:=x_{k-1}-s_k\,\nabla J(x_{k-1}).

Dabei ist sks_k die Schrittweite, welche auf verschiedene Arten gewählt werden kann, z.B. konstant. Für den Gradient erhält man

J(x)=Axb.\nabla J(x)=A\,x-b.

Wählt man sks_k stets so, dass J(xk1sJ(xk1))J(x_{k-1}-s\,\nabla J(x_{k-1})) für s=sks=s_k minimal wird, so erhält man das CG-Verfahren, welches besonders schnell konvergiert. Für konstantes sks_k erhält man hingegen das Verfahren des steilsten Abstiegs, welches verhältnismäßig langsam konvergiert.

6.5.2.3Verfahren für dünn besetzte Matrizen

In zahlreichen Anwendungen treten dünn besetzte (englisch: sparse) sehr große Matrizen ARn×nA\in\bbR^{n\times n} auf, also Matrizen die nur wenige von Null verschiedene Einträge haben. Die Anzahl der Nicht-Null-Einträge ist üblicherweise ein kleines Vielfaches von nn. Diese Matrizen speichert man nicht als Block aus n2n^2 Zahlen, sondern als Liste der Nicht-Null-Einträge und der zugehörigen Zeilen-Spalten-Indizes.

Beispielsweise sind Adjazenzmatrizen von Graphen oft dünnbesetzt (und groß). Auch beim numerischen Lösen vieler naturwissenschaftlicher Probleme treten große dünnbesetzte Matrizen auf (vgl. Veranstaltung zum wissenschaftlichen Rechnen).

Der Zugriff auf einen durch Zeilen- und Spaltenindex gegebenen Matrixeintrag ist bei dünn besetzten Matrizen mit hohem Aufwand verbunden (Liste durchsuchen!). Matrix-Vektor-Produkte können jedoch schnell berechnet werden (IDVID 680). Somit sind iterative Lösungsverfahren gegenüber Gauß-Algorithmus und Cholesky-Verfahren hier klar im Vorteil, da iterative Verfahren meist nur Matrix-Vektor-Produkte auswerten und keine anderweitigen Zugriffe auf die Matrixeinträge tätigen.

Heute übliche Verfahren für große dünn besetzte Gleichungssysteme sind Krylow-Unterraum-Verfahren (Verallgemeinerung des CG-Verfahrens) und Mehrgitterverfahren.

6.5.3Vorkonditionierung

Die Konvergenz iterative Lösungsverfahren kann deutlich beschleunigt werden, wenn das Gleichungssystem im Vorfeld geeignet äquivalent umgeformt wird. Auch für nicht iterative Verfahren kann eine geeignet Umformung zur Verbesserung der Matrixkondition führen. Ein übliche Umformung ist die Multiplikation mit einer geeignet gewählten Matrix MRn×nM\in\bbR^{n\times n}:

MAx=Mb.M\,A\,x=M\,b.

Diese Matrix soll leicht zu beschaffen sein und dabei die Inverse A1A^{-1} möglichst gut annähern. Wie MM konkret zu wählen ist, hängt auch vom eingesetzten Lösungsverfahren ab.

Eine einfache Technik zur Vorkonditionierung ist die Äquilibrierung: Jede Zeile des Gleichungssystems wird durch die Länge der entsprechenden Zeile der Systemmatrix als Vektor geteilt. Bei Verwendung der euklidischen Norm also

M=[(j=1na1,j2)1200(j=1nan,j2)12].M=\begin{bmatrix} \left(\sum\limits_{j=1}^n a_{1,j}^2\right)^{-\frac{1}{2}}&&0\\ &\ddots&\\ 0&&\left(\sum\limits_{j=1}^n a_{n,j}^2\right)^{-\frac{1}{2}} \end{bmatrix}.
References
  1. Sautter, W. (1978). Fehleranalyse für die Gauß-Elimination zur Berechnung der Lösung minimaler Länge. Numerische Mathematik, 30(2), 165–184. 10.1007/bf02042943
  2. Higham, N. J. (2002). Accuracy and Stability of Numerical Algorithms. Society for Industrial. 10.1137/1.9780898718027