Zum Inhalt springen

„Cholesky-Zerlegung“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Transfererror (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(180 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden)
Zeile 1: Zeile 1:
Die '''Cholesky-Zerlegung''' (auch '''Cholesky-Faktorisierung''') (nach [[André-Louis Cholesky]], 1875–1918) bezeichnet in der [[Lineare Algebra|linearen Algebra]] eine Zerlegung einer [[Symmetrische Matrix|symmetrischen]] [[Definitheit|positiv definiten]] [[Matrix (Mathematik)|Matrix]] in ein [[Matrizenprodukt|Produkt]] aus einer unteren [[Dreiecksmatrix]] und deren [[Transponierte Matrix|Transponierten]]. Die Zerlegung existiert für jede solche Matrix und ist nur bei der erweiterten Zerlegung mit Diagonalmatrix D eindeutig. Die Cholesky-Zerlegung selbst ist nicht eindeutig. Sie wurde von Cholesky vor 1914 im Zuge der [[Triangulation (Geodäsie)|Triangulation]] Kretas durch den französischen ''[[Dépôt de la Guerre|Service géographique de l’armée]]'' entwickelt. Das Konzept kann auch allgemeiner für [[Hermitesche Matrix|hermitesche Matrizen]] definiert werden.
Die '''Cholesky-Zerlegung''' (nach [[André-Louis Cholesky]] (1875-1918)) bezeichnet in der [[Numerische Mathematik|numerischen Mathematik]] eine [[Zerlegung]] einer symmetrischen positiv definiten [[Matrix_(Mathematik)|Matrix]].


== Anwendungen ==
== Formulierung und Anwendung==


Bei der Anwendung der [[Methode der kleinsten Quadrate]] ist eine Möglichkeit, die auftauchenden [[Minimierungsproblem]]e über die [[Normalgleichungen]] zu lösen, die eine [[Symmetrische Matrix|symmetrische]] [[Definitheit#Definitionen|positiv definite]] Systemmatrix haben. Dies ist mit Hilfe der Cholesky-Zerlegung möglich und dies war die Motivation von Cholesky, die Zerlegung zu entwickeln. Beim [[Gauß-Newton-Verfahren]] ist damit bei jedem Iterationsschritt ein [[Gleichungssystem]] zu lösen, das sich mit dem Cholesky-Verfahren bestimmen lässt.
Jede symmetrische positiv definite Matrix <math>A \in \mathbb{R}^{n\times n}</math> ist orthogonal [[Diagonalisierung|diagonalisierbar]] und kann daher eindeutig in der Form


Die Cholesky-Zerlegung kann auch zur Gewinnung eines [[Vorkonditionierung]]sverfahrens für lineare Gleichungssysteme mit [[Definitheit#Definitionen|positiv definiter]] [[Matrix (Mathematik)|Matrix]] benutzt werden. Zu diesem Zweck gibt es speziell die Varianten der ''[[Unvollständige Cholesky-Zerlegung|unvollständigen Cholesky-Zerlegung]]'' und der ''modifizierten unvollständigen Cholesky-Zerlegung''.
:<math>A=L D L^{T} \,</math>


Gleichzeitig stellt die Zerlegung einen Test dar, ob eine gegebene symmetrische Matrix positiv definit ist. Andernfalls ist eines der Elemente auf der [[Hauptdiagonale]]n negativ, sodass die [[Quadratwurzel]] nicht gezogen werden kann, oder gleich <math>0</math>, sodass durch das Element nicht dividiert werden kann. In beiden Fällen bricht der [[Algorithmus]] ab. Die Cholesky-Zerlegung lässt sich auch zur Bestimmung der [[Determinante (Mathematik)|Determinante]] der Matrix <math>A</math> verwenden, denn es gilt <math>\textstyle \det A = \prod_{i=1}^n G_{ii}^2</math>.
geschrieben werden, wobei <math>L</math> eine untere [[Dreiecksmatrix]] ohne Diagonale und <math>D</math> eine positive [[Diagonalmatrix]] ist.
Mit der Matrix-"Wurzel" <math>D</math> und dem Matrix-Faktor <math>G</math>, definiert durch


Außerhalb der Mathematik findet die Cholesky-Zerlegung auch Anwendung in der ökonometrischen Erforschung makroökonomischer Zusammenhänge. Hierbei wird bei sogenannten [[Vektorautoregressive Modelle|vektorautoregressiven Modellen (VAR)]] die Reihenfolge der Beeinflussung der endogenen Variablen untereinander festgelegt.
:<math>D = D^{1/2}D^{1/2} \,</math>


Darüber hinaus wird sie auch bei der [[Monte-Carlo-Simulation]] eingesetzt, um vorgegebene [[Korrelation]]en in unabhängig generierte [[Zufallszahl]]enfolgen als [[Diskretisierung]] [[Stochastischer Prozess|stochastischer Prozesse]] zu bringen.
und


== Formulierung ==
:<math>G := LD^{1/2} \,</math>,


Jede [[Symmetrische Matrix#Definition|symmetrische]], [[Definitheit#Definitionen|positiv definite]] [[Matrix (Mathematik)|Matrix]] <math>A \in \mathbb{R}^{n\times n}</math> kann eindeutig in der Form
wird die Cholesky-Zerlegung – äquivalent – auch formuliert als
: <math>A = L D L^{T}</math>


geschrieben werden. Dabei ist <math>L</math> eine [[Dreiecksmatrix#Normierung|normierte untere Dreiecksmatrix]] und <math>D</math> eine [[Diagonalmatrix]] mit positiven Elementen. Mit der [[Quadratwurzel einer Matrix|Quadratwurzel]] von <math>D</math> und dem Matrix-Faktor <math>G</math>, definiert durch
:<math>A=G G^{T} \,</math>.


: <math>D = D^{1/2}D^{1/2}</math>
Liegt eine Berechnung der Cholesky-Zerlegung vor, so lässt sich beispielsweise die Multiplikation der [[Inverse Matrix|Matrixinversen]] <math>A^{-1}</math> mit einem Vektor <math>b</math> effizient durch Vorwärts- und Rückwärtseinsetzen berechnen:


und
* Durch Vorwärtseinsetzen Lösung des linearen Gleichungssystems <math>G y = b</math>


: <math>G := LD^{1/2}</math>,
* Durch Rückwärtseinsetzen Lösung des linearen Gleichungssystems <math>G^{T} x = y</math>


wird die Cholesky-Zerlegung – äquivalent – auch formuliert als
Damit kann die Choleskyzerlegung auch zur Gewinnung eines Vorkonditionierungsverfahrens für lineare Gleichungssysteme mit positiv definiter Matrix benutzt werden; zu diesem Zweck gibt es speziell die Variante der ''unvollständigen Cholesky-Zerlegung'' sowie der ''modifizierten unvollständigen Cholesky-Zerlegung''. Es wird dabei ausgenutzt, dass man durch Cholesky-Zerlegung recht effizient eine (Näherungs-)Inverse der Matrix berechnen kann.


: <math>A = L D L^{T} = L D^{1/2} (D^{1/2})^{T} L^{T} = L D^{1/2} (L D^{1/2})^{T} = G G^{T}</math>.
==Berechnung==
===Formeln===
Für alle k = 1..n;
<math>
g_{kk} = \sqrt{a_{kk} - \sum_{i=1}^{k-1}g_{ki}^2 }
</math>


Liegt eine Berechnung der Cholesky-Zerlegung vor, so lässt sich das [[Gleichungssystem]] <math> Ax=b</math> effizient durch [[Gaußsches Eliminationsverfahren|Vorwärts- und Rückwärtseinsetzen]] lösen:
für l=k+1..n;
<math>
g_{lk} = \frac{1}{g_{kk}} \cdot \left( a_{lk}-\sum_{i=1}^{k-1}g_{li} \cdot g_{ki} \right)
</math>


* Durch Vorwärtseinsetzen: Lösen des [[Lineares Gleichungssystem|linearen Gleichungssystems]] <math>G y = b</math>
Den Aufwand der Berechnung betreffend muß die Cholesky-Zerlegung mit dem [[Gaußsches Eliminationsverfahren|Eliminationsverfahren nach Gauß]] und seiner algorithmischen Umsetzung, der [[LR-Zerlegung]], verglichen werden. Letzteres erfordert etwa doppelt so viele Operationen, da eine Pivotisierung, d.h. Spalten- und/oder Zeilenpermutation, durchgeführt werden muß, einerseits um Division durch Null zu vermeiden, andererseits aus Stabilitätsgründen. Beide Gründe zur Pivotisierung entfallen bei positiv definiten Matrizen - dies ist die Ursache des geringeren Rechenaufwandes der Cholesky-Zerlegung.
* Durch anschließendes Rückwärtseinsetzen: Lösen des linearen Gleichungssystems <math>G^{T} x = y.</math>
Die Cholesky-Zerlegung kann somit als eine Variante des Gauß-Verfahrens ohne Pivotisierung aufgefaßt werden.
Für die Elemente <math>D_{jj}</math> der [[Diagonalmatrix]] <math>D</math> gilt


: <math> D_{jj} = A_{jj} - \sum_{k=1}^{j-1} L_{jk}^2 D_{kk} </math>
Ein klassischer Testfall für jede Implementation der Cholesky-Zerlegung ist die [[Hilbert-Matrix]], weil sie symmetrisch und positiv definit ist, aber eine vergleichsweise schlechte [[Kondition (Mathematik)|Kondition]] hat.


und für die Elemente <math>L_{ij}</math> der [[Dreiecksmatrix#Normierung|normierten unteren Dreiecksmatrix]] <math>L</math> gilt
Bei klassischen Lösern linearer Gleichungssysteme stellt die Pivotisierung wiederum ein Hindernis für Algorithmen dar, welche die Bandbreite oder Hüllgröße des Faktors <math>G</math> aus Gründen der Speichereffizienz minimieren sollen (etwa Cuthill-McKee- oder Minimum-Grad-Algorithmus). Demnach ist die Cholesky-Zerlegung auch besonders geeignet für die Zerlegung dünnbesetzter Matrizen.


: <math> L_{ij} = \left(A_{ij} - \sum_{k=1}^{j-1} L_{ik} D_{kk} L_{jk} \right) {D_{jj}}^{-1}, \quad i > j </math>
Das Gelingen oder allfällige Nichtgelingen der Cholesky-Zerlegung ist ein wichtiges Kriterium um zu entscheiden, ob eine bestimmte Matrix positiv definit ist oder nicht.


===Algorithmus===
=== Beispiele ===
Ist <math>A</math> eine 3x3-Matrix, dann sieht die Cholesky-Zerlegung wie folgt aus:
Die Berechnung eines linearen Gleichungssystems mit dem Cholesky-Verfahren kann in zwei Schritten vollzogen werden: Zunächst kann man die Matrix A (Dimension n &times; n), welche die Koeffizienten enthält, in die Form LDL<SUP>T</SUP> bringen. In diesem Verfahrensschritt kann man feststellen, ob die Matrix A positiv und symmetrisch definit ist. Der Lösungsvektor B muss noch nicht bekannt sein.


: <math>
In [[Pseudocode]] sieht das Cholesky-Verfahren zur Zerlegung der Matrix A in die Form LDL<SUP>T</SUP> so aus:
\begin{align}
A = L D L^{T} &=
\begin{pmatrix}
1 & 0 & 0 \\
L_{21} & 1 & 0 \\
L_{31} & L_{32} & 1 \\
\end{pmatrix}
\begin{pmatrix}
D_{11} & 0 & 0 \\
0 & D_{22} & 0 \\
0 & 0 & D_{33} \\
\end{pmatrix}
\begin{pmatrix}
1 & L_{21} & L_{31} \\
0 & 1 & L_{32} \\
0 & 0 & 1\\
\end{pmatrix}\\
& = \begin{pmatrix}
D_{11} & L_{21}D_{11} & L_{31}D_{11} \\
L_{21}D_{11} & L_{21}^2D_{11} + D_{22} & L_{31}L_{21}D_{11} + L_{32}D_{22} \\
L_{31}D_{11} & L_{31}L_{21}D_{11} + L_{32}D_{22} & L_{31}^2D_{11} + L_{32}^2D_{22} + D_{33}
\end{pmatrix}
\end{align}
</math>


: <math>\begin{align}
For i = 1 To n
For k = i To n
A = G G^T & =
\begin{pmatrix}
A(i,i) = A(i,i)-A(k,i)*A(k,i)
Next k
G_{11} & 0 & 0 \\
G_{21} & G_{22} & 0 \\
If A(i,i) <= 0 Then EXIT ("Matrix nicht Positiv definit!")
G_{31} & G_{32} & G_{33} \\
else A(i,i)=sqrt(A(i,i))
\end{pmatrix}
For j = i+1 To n
\begin{pmatrix}
For k = 1 To k-1
G_{11} & G_{21} & G_{31} \\
A(i,j) = A(i,j) - A(k,i)*A(k,j)
Next k
0 & G_{22} & G_{32} \\
0 & 0 & G_{33}
A(i,j) = A(i,j) / A(i,i)
\end{pmatrix} \\
Next j
& =
Next i
\begin{pmatrix}

G_{11}^2 & G_{21}G_{11} & G_{31}G_{11} \\
Die Indizes der Matrix A entsprechen der mathematischen Notierung i=1..n, j=1..n), n ist die Anzahl der Zeilen und gleichzeitig die Anzahl der Spalten der Matrix A, Hilfsvariablen sind i, j, k und Summe. Der Algorithmus arbeitet am Ort, d.h. er modifiziert die Matrix A so, dass sie die obere Dreiecksmatrix und die Diagonalmatrix DL<SUP>T</SUP> enthält.
G_{21}G_{11} & G_{21}^2 + G_{22}^2 & G_{31}G_{21}+G_{32}G_{22} \\

G_{31}G_{11} & G_{31}G_{21}+G_{32}G_{22} & G_{31}^2 + G_{32}^2+G_{33}^2
Der Algorithmus bearbeitet nur die rechte obere Dreiecksmatrix von A, die Werte <math> A_{i,j} \, </math> für i < j brauchen nicht mit Werten belegt werden (da die Matrix A nach Voraussetzung symmetrisch ist) und wenn sie Werte enthalten, werden diese nicht verändert. Sucht man also nach der Cholesky-Zerlegung <math>R</math> gemäß <math>A = R^T R</math>, so sind die Matrixelemente von A unterhalb der Diagonalen (i < j) gleich Null zu setzen.
\end{pmatrix}

\end{align}</math>

Sobald dann der Spaltenvektor B (Dimension n &times; 1) des Gleichungssystems zur Verfügung steht, kann weitergerechnet werden:

For i = 1 To n
For k = i - 1 To 1 Step -1
b(i) = b(i) - a(i, k) * b(k)
Next k
b(i) = b(i) / a(i, i)
Next i
For i = n To 1 Step -1
For k = i + 1 To n
b(i) = b(i) - a(k, i) * b(k)
Next k
b(i) = b(i) / a(i, i)
Next i

Der Vektor B wird durch die Berechnung mit dem Lösungsvektor überschrieben. Mit der vorhandenen Zerlegung von A können immer wieder Lösungen zu beliebig vielen verschiedenen Vektoren B bestimmt werden.

===Einsatzbereiche===
Bei der Anpassung von Polynomen oder Funktionen mit mehreren Veränderlichen, die mit der [[Methode_der_kleinsten_Quadrate|Gaußschen Fehlerquadratmethode]] vorgenommen werden, entstehen Gleichungssysteme, welche mit der Cholesky-Verfahren einfach gelöst werden können. Beim [[Gauß-Newton-Verfahren]] ist bei jedem Iterationsschritt ein Gleichungssystem zu lösen, welches sich mit dem Cholesky-Verfahren bestimmen lässt.


Mit konkreten Zahlen:
===Vorgerechnetes Beispiel===


:<math>A=G G^{T} \,</math>
: <math>\begin{align}
A =
\begin{pmatrix}
4 & 12 & -16 \\
12 & 37 & -43 \\
-16 & -43 & 98 \\
\end{pmatrix}
& =
\begin{pmatrix}
1 & 0 & 0 \\
3 & 1 & 0 \\
-4 & 5 & 1 \\
\end{pmatrix}
\begin{pmatrix}
4 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 9 \\
\end{pmatrix}
\begin{pmatrix}
1 & 3 & -4 \\
0 & 1 & 5 \\
0 & 0 & 1 \\
\end{pmatrix}
= LDL^{T}\\
& =
\begin{pmatrix}
2 & 0 & 0 \\
6 & 1 & 0 \\
-8 & 5 & 3 \\
\end{pmatrix}
\begin{pmatrix}
2 & 6 & -8 \\
0 & 1 & 5 \\
0 & 0 & 3 \\
\end{pmatrix}
= G G^{T}
\end{align}</math>


== Berechnung ==
mit


Setzt man <math>A=GG^T \in \R^{n \times n}</math>, so erhält man für die Elemente von <math>A=\left(a_{ij}\right)_{ij}</math>:
:<math>
:<math>
a_{ij}=\sum\limits_{k=1}^jg_{ik} g_{jk} \quad i \geq j
A=
\begin{pmatrix}
4 & 2 & 0 \\
2 & 5 & 2 \\
0 & 2 & 5
\end{pmatrix}
</math>
</math>


Dieser Zusammenhang führt direkt auf die folgenden Formeln für <math>G=\left(g_{ij}\right)_{ij}</math>:
und
: <math>
\begin{align}
g_{ij} &=
\begin{cases}0 & \mathrm{f\ddot{u}r}\ i < j\\
\left(a_{ii} - \sum\limits_{k=1}^{i-1}g_{ik}^2\right)^{1/2} & \mathrm{f\ddot{u}r}\ i = j\\
\left( a_{ij} - \sum\limits_{k=1}^{j-1}g_{ik} g_{jk} \right) g_{jj}^{-1} & \mathrm{f\ddot{u}r}\ i > j
\end{cases} \\
g_{i1} &=
\begin{cases} \left(a_{11} \right)^{1/2} & \mathrm{f\ddot{u}r}\ i = 1\\
a_{i1}\left(g_{11}\right)^{-1} = a_{i1}\left(a_{11}\right)^{-1/2} & \mathrm{f\ddot{u}r}\ i > 1
\end{cases}
\end{align}
</math>
Bei diesem [[Algorithmus]] ist es wichtig, die Elemente in der richtigen Reihenfolge zu berechnen. Die Elemente werden spaltenweise berechnet und beginnend mit dem niedrigsten Zeilenindex.


Die Berechnung der Zerlegung <math>A=LDL^T</math> erfolgt in analoger Art und Weise für <math>L=\left(l_{ij}\right)_{ij}</math> und <math> D=\left(d_{ij}\right)_{ij}</math>:
:<math>
:<math>
G= \begin{pmatrix}
\begin{align}
g_{11} & 0 & 0 \\
d_{ij} &=
\begin{cases}
g_{21} & g_{22} & 0 \\
0 & \mathrm{f\ddot{u}r}\ i \neq j\\
g_{31} & g_{32} & g_{33}
a_{ii} - \sum_{k=1}^{i-1}l_{ik}^2 d_{kk} & \mathrm{f\ddot{u}r}\ i = j
\end{pmatrix}
\end{cases} \\
l_{ij} &=
\begin{cases}
0 & \mathrm{f\ddot{u}r}\ i < j\\
1 & \mathrm{f\ddot{u}r}\ i = j\\
\frac{1}{d_{jj}} \left( a_{ij}-\sum_{k=1}^{j-1} l_{ik} l_{jk} d_{kk} \right) & \mathrm{f\ddot{u}r} \; i > j
\end{cases}
\end{align}
</math>
</math>
Auch bei diesen Algorithmen ist es wichtig, die Reihenfolge der berechneten Elemente richtig zu wählen. Zuerst muss man zum Index <math>j=1,\dotsc,n</math> das Element <math>d_{jj}</math> berechnen und anschließend die Spalte <math>j</math> der [[Matrix (Mathematik)|Matrix]] <math>L</math>, also: <math>l_{ij}</math> für <math>i=j+1,\dotsc,n</math>.
und
:<math>
G^{T}= \begin{pmatrix}
g_{11} & g_{21} & g_{31} \\
0 & g_{22} & g_{32} \\
0 & 0 & g_{33}
\end{pmatrix}
</math>
ergibt sich
:<math>G*G^{T}=
\begin{pmatrix}
g_{11}^2 & g_{11} * g_{21} & g_{11} * g_{31} \\
g_{21} * g_{11} & g_{21}^2+g_{22}^2 & g_{21} * g_{31}+g_{22} * g_{32} \\
g_{31} * g_{11} & g_{31} * g_{21}+g_{22} * g_{32} & g_{31}^2+g_{32}^2+g_{33}^2
\end{pmatrix}
</math>.


=== Aufwand und Stabilität ===
Daraus folgt:
:<math>g_{11}^2 = a_{11} = 4 \rightarrow g_{11}=2</math>
:<math>g_{21}*g_{11}= a_{21} = 2 \rightarrow g_{21}=1</math>


Die Cholesky-Zerlegung ist [[Stabilität (Numerik)|numerisch stabil]]. Im Vergleich erfordert das [[Gaußsches Eliminationsverfahren|Eliminationsverfahren nach Gauß]] mit seiner algorithmischen Umsetzung, der [[LR-Zerlegung]], etwa doppelt so viele Operationen, da nicht nur eine [[Matrix (Mathematik)|Matrix]] <math>G</math>, sondern zwei [[Faktor (Mathematik)|Faktoren]] <math>L</math> und <math>R</math> berechnet werden müssen. Bei der Cholesky-Zerlegung treten <math>\tfrac{1}{3} \cdot n^3 + O(n^2)</math> arithmetische Operationen auf, davon <math>\tfrac{1}{6} \cdot n^3</math> [[Multiplikation]]en, <math>\tfrac{1}{2} \cdot n^2</math> [[Division (Mathematik)|Divisionen]] und <math>n</math> [[Wurzel (Mathematik)|Wurzeloperationen]].<ref>Andreas Meister: ''Numerik linearer Gleichungssysteme.'' 5. Auflage. Vieweg, Wiesbaden 2015, ISBN 3-528-13135-7, S. 49.</ref>
So wird für die restlichen g's weiterverfahren.
Schließlich ergibt sich
:<math>
G= \begin{pmatrix}
2 & 0 & 0 \\
1 & 2 & 0 \\
0 & 1 & 2
\end{pmatrix}
</math>


=== Pseudocode ===
und


Die Berechnungen in obigen Formeln können in verschiedener Weise durchgeführt werden. Die nach [[Tadeusz Banachiewicz]] benannte Variante berechnet die untere Dreiecksmatrix zeilenweise. In [[Pseudocode]] sieht das Verfahren zur Zerlegung der Matrix <math>A</math> in die Form <math>GG^T</math> so aus:
:<math>
[[Datei:Chol.gif|mini|Zugriffe (weiß) und Schreibvorgänge (gelb).]]
G^{T}= \begin{pmatrix}
<syntaxhighlight lang="pascal">
2 & 1 & 0 \\
0 & 2 & 1 \\
For i = 1 To n
0 & 0 & 2
For j = 1 To i
Summe = a(i, j)
\end{pmatrix}
For k = 1 To j-1
</math>.
Summe = Summe - a(i, k) * conj(a(j, k))
If i > j Then
a(i, j) = Summe / a(j, j) // Untere Dreiecksmatrix
Else If Summe > 0 Then // Diagonalelement
a(i, i) = Sqrt(Summe) // … ist immer größer Null
Else
ERROR // Die Matrix ist (wenigstens numerisch) nicht symmetrisch positiv definit
</syntaxhighlight>
Die Laufindexe <math>i,j=1,\ldots,n</math> im [[Pseudocode]] entsprechen der mathematischen Notierung von Elementen der [[Matrix (Mathematik)|Matrix]] <math>A=\left(a_{ij}\right)_{ij}</math>. Dabei ist <math>n</math> die Anzahl der Zeilen und gleichzeitig die Anzahl der Spalten der Matrix <math>A</math>, Hilfsvariablen sind <math>k</math> und ''Summe''. Der [[Algorithmus]] arbeitet [[In-Place-Algorithmus|in situ]]: Er modifiziert die Matrix <math>A</math> so, dass diese zur unteren [[Dreiecksmatrix]] <math>G</math> wird. Es entsteht also für die Matrix <math>G</math> kein neuer [[Speicherplatz]]bedarf.

Der obige [[Algorithmus]] bearbeitet nur die linke untere [[Dreiecksmatrix]] von <math>A=\left(a_{ij}\right)_{ij}</math>, die Elemente <math>a_{ij}</math> für <math>i<j</math> brauchen nicht mit Werten belegt zu werden, da die [[Matrix (Film)|Matrix]] <math>A</math> nach Voraussetzung [[Symmetrische Matrix|symmetrisch]] ist, und wenn sie Werte enthalten, werden diese nicht verändert. Sucht man also nach der Cholesky-Zerlegung <math>G</math> gemäß <math>A=GG^T</math>, so sind die Elemente <math>a_{ij}</math> von <math>A</math> oberhalb der Diagonalen noch auszunullen.


== Literatur ==
== Literatur ==
* Hans Rudolf Schwarz & Nobert Köckler: Numerische Mathematik. Stuttgart: Teubner, 2004 (5. Auflage) ISBN 3-519-42960-8
* Hans Rudolf Schwarz, Norbert Köckler: ''Numerische Mathematik.'' 5. Auflage. Teubner, Stuttgart 2004, ISBN 3-519-42960-8.
* Gene H. Golub & Charles F. Van Loan: Matrix computations. Johns Hopkins University Press, 1996 (3rd edition) ISBN 0-80185414-8
* Gene H. Golub, Charles F. Van Loan: ''Matrix computations.'' 3rd edition. Johns Hopkins University Press, 1996, ISBN 0-8018-5414-8.
* Michael Saunders: ''Commentary – Major Cholesky Would Feel Proud.'' In: ''ORSA Journal on Computing'', 6, 1994, S. 23–27.


== Weblinks ==
[[Kategorie:Numerische Mathematik]]
* ''[https://taramath.de/tools/cholesky taramath Online-Tool]'' zur Berechnung der Cholesky-Zerlegung symmetrischer und positiv definiter Matrizen.


== Einzelnachweise ==
[[en:Cholesky decomposition]]
<references />
[[fr:Factorisation de Cholesky]]
[[it:Decomposizione di Choleski]]


[[Kategorie:Numerische lineare Algebra]]
==Weblinks==
[http://www.library.cornell.edu/nr/bookcpdf/c2-9.pdf Numerical Recipes in C] Online Ausgabe

Aktuelle Version vom 26. November 2024, 08:40 Uhr

Die Cholesky-Zerlegung (auch Cholesky-Faktorisierung) (nach André-Louis Cholesky, 1875–1918) bezeichnet in der linearen Algebra eine Zerlegung einer symmetrischen positiv definiten Matrix in ein Produkt aus einer unteren Dreiecksmatrix und deren Transponierten. Die Zerlegung existiert für jede solche Matrix und ist nur bei der erweiterten Zerlegung mit Diagonalmatrix D eindeutig. Die Cholesky-Zerlegung selbst ist nicht eindeutig. Sie wurde von Cholesky vor 1914 im Zuge der Triangulation Kretas durch den französischen Service géographique de l’armée entwickelt. Das Konzept kann auch allgemeiner für hermitesche Matrizen definiert werden.

Bei der Anwendung der Methode der kleinsten Quadrate ist eine Möglichkeit, die auftauchenden Minimierungsprobleme über die Normalgleichungen zu lösen, die eine symmetrische positiv definite Systemmatrix haben. Dies ist mit Hilfe der Cholesky-Zerlegung möglich und dies war die Motivation von Cholesky, die Zerlegung zu entwickeln. Beim Gauß-Newton-Verfahren ist damit bei jedem Iterationsschritt ein Gleichungssystem zu lösen, das sich mit dem Cholesky-Verfahren bestimmen lässt.

Die Cholesky-Zerlegung kann auch zur Gewinnung eines Vorkonditionierungsverfahrens für lineare Gleichungssysteme mit positiv definiter Matrix benutzt werden. Zu diesem Zweck gibt es speziell die Varianten der unvollständigen Cholesky-Zerlegung und der modifizierten unvollständigen Cholesky-Zerlegung.

Gleichzeitig stellt die Zerlegung einen Test dar, ob eine gegebene symmetrische Matrix positiv definit ist. Andernfalls ist eines der Elemente auf der Hauptdiagonalen negativ, sodass die Quadratwurzel nicht gezogen werden kann, oder gleich , sodass durch das Element nicht dividiert werden kann. In beiden Fällen bricht der Algorithmus ab. Die Cholesky-Zerlegung lässt sich auch zur Bestimmung der Determinante der Matrix verwenden, denn es gilt .

Außerhalb der Mathematik findet die Cholesky-Zerlegung auch Anwendung in der ökonometrischen Erforschung makroökonomischer Zusammenhänge. Hierbei wird bei sogenannten vektorautoregressiven Modellen (VAR) die Reihenfolge der Beeinflussung der endogenen Variablen untereinander festgelegt.

Darüber hinaus wird sie auch bei der Monte-Carlo-Simulation eingesetzt, um vorgegebene Korrelationen in unabhängig generierte Zufallszahlenfolgen als Diskretisierung stochastischer Prozesse zu bringen.

Jede symmetrische, positiv definite Matrix kann eindeutig in der Form

geschrieben werden. Dabei ist eine normierte untere Dreiecksmatrix und eine Diagonalmatrix mit positiven Elementen. Mit der Quadratwurzel von und dem Matrix-Faktor , definiert durch

und

,

wird die Cholesky-Zerlegung – äquivalent – auch formuliert als

.

Liegt eine Berechnung der Cholesky-Zerlegung vor, so lässt sich das Gleichungssystem effizient durch Vorwärts- und Rückwärtseinsetzen lösen:

  • Durch Vorwärtseinsetzen: Lösen des linearen Gleichungssystems
  • Durch anschließendes Rückwärtseinsetzen: Lösen des linearen Gleichungssystems

Für die Elemente der Diagonalmatrix gilt

und für die Elemente der normierten unteren Dreiecksmatrix gilt

Ist eine 3x3-Matrix, dann sieht die Cholesky-Zerlegung wie folgt aus:

Mit konkreten Zahlen:

Setzt man , so erhält man für die Elemente von :

Dieser Zusammenhang führt direkt auf die folgenden Formeln für :

Bei diesem Algorithmus ist es wichtig, die Elemente in der richtigen Reihenfolge zu berechnen. Die Elemente werden spaltenweise berechnet und beginnend mit dem niedrigsten Zeilenindex.

Die Berechnung der Zerlegung erfolgt in analoger Art und Weise für und :

Auch bei diesen Algorithmen ist es wichtig, die Reihenfolge der berechneten Elemente richtig zu wählen. Zuerst muss man zum Index das Element berechnen und anschließend die Spalte der Matrix , also: für .

Aufwand und Stabilität

[Bearbeiten | Quelltext bearbeiten]

Die Cholesky-Zerlegung ist numerisch stabil. Im Vergleich erfordert das Eliminationsverfahren nach Gauß mit seiner algorithmischen Umsetzung, der LR-Zerlegung, etwa doppelt so viele Operationen, da nicht nur eine Matrix , sondern zwei Faktoren und berechnet werden müssen. Bei der Cholesky-Zerlegung treten arithmetische Operationen auf, davon Multiplikationen, Divisionen und Wurzeloperationen.[1]

Die Berechnungen in obigen Formeln können in verschiedener Weise durchgeführt werden. Die nach Tadeusz Banachiewicz benannte Variante berechnet die untere Dreiecksmatrix zeilenweise. In Pseudocode sieht das Verfahren zur Zerlegung der Matrix in die Form so aus:

Zugriffe (weiß) und Schreibvorgänge (gelb).
    For i = 1 To n
        For j = 1 To i
            Summe = a(i, j)
            For k = 1 To j-1
                Summe = Summe - a(i, k) * conj(a(j, k))
            If i > j Then
                a(i, j) = Summe / a(j, j)   // Untere Dreiecksmatrix
            Else If Summe > 0 Then          // Diagonalelement
                a(i, i) = Sqrt(Summe)       // … ist immer größer Null
            Else
                ERROR                       // Die Matrix ist (wenigstens numerisch) nicht symmetrisch positiv definit

Die Laufindexe im Pseudocode entsprechen der mathematischen Notierung von Elementen der Matrix . Dabei ist die Anzahl der Zeilen und gleichzeitig die Anzahl der Spalten der Matrix , Hilfsvariablen sind und Summe. Der Algorithmus arbeitet in situ: Er modifiziert die Matrix so, dass diese zur unteren Dreiecksmatrix wird. Es entsteht also für die Matrix kein neuer Speicherplatzbedarf.

Der obige Algorithmus bearbeitet nur die linke untere Dreiecksmatrix von , die Elemente für brauchen nicht mit Werten belegt zu werden, da die Matrix nach Voraussetzung symmetrisch ist, und wenn sie Werte enthalten, werden diese nicht verändert. Sucht man also nach der Cholesky-Zerlegung gemäß , so sind die Elemente von oberhalb der Diagonalen noch auszunullen.

  • Hans Rudolf Schwarz, Norbert Köckler: Numerische Mathematik. 5. Auflage. Teubner, Stuttgart 2004, ISBN 3-519-42960-8.
  • Gene H. Golub, Charles F. Van Loan: Matrix computations. 3rd edition. Johns Hopkins University Press, 1996, ISBN 0-8018-5414-8.
  • Michael Saunders: Commentary – Major Cholesky Would Feel Proud. In: ORSA Journal on Computing, 6, 1994, S. 23–27.
  • taramath Online-Tool zur Berechnung der Cholesky-Zerlegung symmetrischer und positiv definiter Matrizen.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Andreas Meister: Numerik linearer Gleichungssysteme. 5. Auflage. Vieweg, Wiesbaden 2015, ISBN 3-528-13135-7, S. 49.