Gram-Schmidtsches Orthogonalisierungsverfahren

Das Gram-Schmidt’sche Orthogonalisierungsverfahren ist ein Algorithmus aus dem mathematischen Teilgebiet der linearen Algebra. Er erzeugt zu jedem System linear unabhängiger Vektoren aus einem Prähilbertraum (einem Vektorraum mit Skalarprodukt) ein Orthogonalsystem, das denselben Untervektorraum erzeugt. Eine Erweiterung stellt das Gram-Schmidt’sche Orthonormalisierungsverfahren dar: Statt eines Orthogonalsystems berechnet es ein Orthonormalsystem. Verwendet man ein System von Basisvektoren als Eingabe für die Algorithmen, so berechnen sie eine Orthogonal- bzw. Orthonormalbasis.

Die beiden Verfahren sind nach Jørgen Pedersen Gram und Erhard Schmidt benannt. Sie wurden allerdings bereits früher in den Werken von Pierre-Simon Laplace und Augustin-Louis Cauchy verwendet.

Für die numerische Berechnung durch einen Computer mit Gleitpunktarithmetik sind die Gram-Schmidt-Verfahren schlecht geeignet. Durch akkumulierte Rundungsfehler sind die berechneten Vektoren nicht mehr orthogonal. Es existieren aber Modifikationen des Verfahrens, die diesen Nachteil nicht haben. Andere Orthogonalisierungsverfahren basieren auf Householdertransformationen oder Givens-Rotationen.

Vorbemerkung

Im Folgenden werden Elemente des betrachteten Vektorraums (Vektoren) mit einfachen lateinischen Buchstaben wie v {\displaystyle v} und w {\displaystyle w} bezeichnet, gegebenenfalls mit Indizes wie v i {\displaystyle v_{i}} und w j {\displaystyle w_{j}} . Es wird sowohl auf übergesetzte Pfeile als auch auf Fettdruck verzichtet. Das Skalarprodukt wird durch spitze Klammern dargestellt: v , w {\displaystyle \langle v,w\rangle } . Im komplexen Fall wird dabei die Konvention verwendet, dass das Skalarprodukt im ersten Argument semilinear, im zweiten Argument linear ist, das heißt

λ v , w = λ ¯ v , w , v , λ w = λ v , w {\displaystyle \langle \lambda v,w\rangle ={\overline {\lambda }}\langle v,w\rangle ,\quad \langle v,\lambda w\rangle =\lambda \langle v,w\rangle }

für alle Vektoren v {\displaystyle v} , w {\displaystyle w} und alle λ C {\displaystyle \lambda \in \mathbb {C} } . Im komplexen Fall kommt es deshalb bei den unten dargestellten Formeln auf die Reihenfolge der Faktoren im Skalarprodukt an, im reellen Fall jedoch nicht.

Zudem bezeichnet v = v , v {\displaystyle \|v\|={\sqrt {\langle v,v\rangle }}} die Norm des Vektors v {\displaystyle v} .

Algorithmus des Orthogonalisierungsverfahrens

Illustration des Gram-Schmidt-Verfahrens an einem Beispiel mit drei Vektoren

Der folgende Algorithmus berechnet zu den linear unabhängigen Vektoren w 1 , , w n {\displaystyle w_{1},\dots ,w_{n}} ein Orthogonalsystem von n {\displaystyle n} paarweise orthogonalen Vektoren, das denselben Untervektorraum erzeugt.

Die einzelnen Vektoren v 1 , , v n {\displaystyle v_{1},\dots ,v_{n}} des Orthogonalsystems berechnen sich wie folgt:

v 1 = w 1 {\displaystyle v_{1}=w_{1}\,}
v 2 = w 2 v 1 , w 2 v 1 , v 1 v 1 {\displaystyle v_{2}=w_{2}-{\frac {\langle v_{1},w_{2}\rangle }{\langle v_{1},v_{1}\rangle }}\,v_{1}}
v 3 = w 3 v 1 , w 3 v 1 , v 1 v 1 v 2 , w 3 v 2 , v 2 v 2 {\displaystyle v_{3}=w_{3}-{\frac {\langle v_{1},w_{3}\rangle }{\langle v_{1},v_{1}\rangle }}\,v_{1}-{\frac {\langle v_{2},w_{3}\rangle }{\langle v_{2},v_{2}\rangle }}\,v_{2}}
{\displaystyle \vdots }
v n = w n v 1 , w n v 1 , v 1 v 1 v 2 , w n v 2 , v 2 v 2 v n 1 , w n v n 1 , v n 1 v n 1 = w n i = 1 n 1 v i , w n v i , v i v i {\displaystyle v_{n}=w_{n}-{\frac {\langle v_{1},w_{n}\rangle }{\langle v_{1},v_{1}\rangle }}\,v_{1}-{\frac {\langle v_{2},w_{n}\rangle }{\langle v_{2},v_{2}\rangle }}\,v_{2}-\dotsb -{\frac {\langle v_{n-1},w_{n}\rangle }{\langle v_{n-1},v_{n-1}\rangle }}\,v_{n-1}=w_{n}-\sum _{i=1}^{n-1}{\frac {\langle v_{i},w_{n}\rangle }{\langle v_{i},v_{i}\rangle }}\,v_{i}}

Anders gesagt werden die v j {\displaystyle v_{j}} für j = 1 , 2 , , n {\displaystyle j=1,2,\dots ,n} also rekursiv durch

v j = w j i = 1 j 1 v i , w j v i , v i v i {\displaystyle v_{j}=w_{j}-\sum _{i=1}^{j-1}{\frac {\langle v_{i},w_{j}\rangle }{\langle v_{i},v_{i}\rangle }}\,v_{i}}

definiert.

Beispiel

Im R 3 {\displaystyle \mathbb {R} ^{3}} versehen mit dem Standardskalarprodukt , {\displaystyle \langle \cdot ,\cdot \rangle } seien zwei linear unabhängige Vektoren vorgegeben, die einen Untervektorraum erzeugen:

w 1 = ( 3 1 2 ) , w 2 = ( 2 2 2 ) {\displaystyle w_{1}={\begin{pmatrix}3\\1\\2\end{pmatrix}},\quad w_{2}={\begin{pmatrix}2\\2\\2\end{pmatrix}}}

Es werden nun zwei orthogonale Vektoren v 1 {\displaystyle v_{1}} und v 2 {\displaystyle v_{2}} berechnet, die denselben Untervektorraum erzeugen:

v 1 = w 1 = ( 3 1 2 ) {\displaystyle v_{1}=w_{1}={\begin{pmatrix}3\\1\\2\end{pmatrix}}}
v 2 = w 2 v 1 , w 2 v 1 , v 1 v 1 = ( 2 2 2 ) 12 14 ( 3 1 2 ) = 1 7 ( 4 8 2 ) {\displaystyle v_{2}=w_{2}-{\frac {\langle v_{1},w_{2}\rangle }{\langle v_{1},v_{1}\rangle }}\cdot v_{1}={\begin{pmatrix}2\\2\\2\end{pmatrix}}-{\frac {12}{14}}\cdot {\begin{pmatrix}3\\1\\2\end{pmatrix}}={\frac {1}{7}}{\begin{pmatrix}-4\\8\\2\end{pmatrix}}}

Algorithmus des Orthonormalisierungsverfahrens

Der folgende Algorithmus berechnet zu den linear unabhängigen Vektoren w 1 , , w n {\displaystyle w_{1},\dots ,w_{n}} ein Orthonormalsystem von n {\displaystyle n} normierten, paarweise orthogonalen Vektoren, das denselben Untervektorraum erzeugt. Er ist identisch mit einer Normierung der orthogonalen Vektoren, welche durch den obigen Algorithmus bestimmt wurden.

Die einzelnen Vektoren v 1 , , v n {\displaystyle v_{1},\dots ,v_{n}} des Orthonormalsystems erhält man, indem zuerst jeweils ein orthogonaler Vektor berechnet und anschließend normalisiert wird:

v 1 = w 1 w 1 {\displaystyle v_{1}={\frac {w_{1}}{\left\|w_{1}\right\|}}} (Normalisieren des ersten Vektors w 1 {\displaystyle w_{1}} )
v 2 = w 2 v 1 , w 2 v 1 {\displaystyle v_{2}^{\prime }=w_{2}-\langle v_{1},w_{2}\rangle \cdot v_{1}} (Orthogonalisieren des zweiten Vektors w 2 {\displaystyle w_{2}} )
v 2 = v 2 v 2 {\displaystyle v_{2}={\frac {v_{2}^{\prime }}{\left\|v_{2}^{\prime }\right\|}}} (Normalisieren des Vektors v 2 {\displaystyle v_{2}^{\prime }} )
v 3 = w 3 v 1 , w 3 v 1 v 2 , w 3 v 2 {\displaystyle v_{3}^{\prime }=w_{3}-\langle v_{1},w_{3}\rangle \cdot v_{1}-\langle v_{2},w_{3}\rangle \cdot v_{2}} (Orthogonalisieren des dritten Vektors w 3 {\displaystyle w_{3}} )
v 3 = v 3 v 3 {\displaystyle v_{3}={\frac {v_{3}^{\prime }}{\left\|v_{3}^{\prime }\right\|}}} (Normalisieren des Vektors v 3 {\displaystyle v_{3}^{\prime }} )
{\displaystyle \vdots }
v n = w n i = 1 n 1 v i , w n v i {\displaystyle v_{n}^{\prime }=w_{n}-\sum _{i=1}^{n-1}\langle v_{i},w_{n}\rangle \cdot v_{i}} (Orthogonalisieren des n {\displaystyle n} -ten Vektors w n {\displaystyle w_{n}} )
v n = v n v n {\displaystyle v_{n}={\frac {v_{n}^{\prime }}{\left\|v_{n}^{\prime }\right\|}}} (Normalisieren des Vektors v n {\displaystyle v_{n}^{\prime }} )

Anders gesagt werden die v j {\displaystyle v_{j}} und v j {\displaystyle v_{j}^{\prime }} für j = 1 , 2 , , n {\displaystyle j=1,2,\dots ,n} also rekursiv durch

v j = w j i = 1 j 1 v i , w j v i {\displaystyle v_{j}^{\prime }=w_{j}-\sum _{i=1}^{j-1}\langle v_{i},w_{j}\rangle \cdot v_{i}} und v j = v j v j {\displaystyle v_{j}={\frac {v_{j}^{\prime }}{\left\|v_{j}^{\prime }\right\|}}} definiert.

Im Allgemeinen erhält man durch dieses Verfahren kein besonders ausgezeichnetes System. Im R 3 {\displaystyle \mathbb {R} ^{3}} muss z. B. erst ein Umordnungsschritt nachgeschaltet werden, um ein Rechts- oder Linkssystem zu erhalten.

Beispiel

Im R 2 {\displaystyle \mathbb {R} ^{2}} versehen mit dem Standardskalarprodukt , {\displaystyle \langle \cdot ,\cdot \rangle } seien zwei Basisvektoren gegeben:

w 1 = ( 3 1 ) , w 2 = ( 2 2 ) {\displaystyle w_{1}={\begin{pmatrix}3\\1\end{pmatrix}},\quad w_{2}={\begin{pmatrix}2\\2\end{pmatrix}}}

Es werden nun zwei Vektoren v 1 {\displaystyle v_{1}} und v 2 {\displaystyle v_{2}} berechnet, die eine Orthonormalbasis des R 2 {\displaystyle \mathbb {R} ^{2}} bilden.

v 1 = w 1 w 1 = 1 10 ( 3 1 ) {\displaystyle v_{1}={\frac {w_{1}}{\left\|w_{1}\right\|}}={\frac {1}{\sqrt {10}}}\cdot {\begin{pmatrix}3\\1\end{pmatrix}}}
v 2 = w 2 v 1 , w 2 v 1 = ( 2 2 ) 1 10 ( 3 1 ) , ( 2 2 ) 1 10 ( 3 1 ) = 1 5 ( 2 6 ) {\displaystyle v_{2}^{\prime }=w_{2}-\langle v_{1},w_{2}\rangle \cdot v_{1}={\begin{pmatrix}2\\2\end{pmatrix}}-{\frac {1}{\sqrt {10}}}\cdot \left\langle {\begin{pmatrix}3\\1\end{pmatrix}},{\begin{pmatrix}2\\2\end{pmatrix}}\right\rangle \cdot {\frac {1}{\sqrt {10}}}{\begin{pmatrix}3\\1\end{pmatrix}}={\frac {1}{5}}{\begin{pmatrix}-2\\6\end{pmatrix}}}
v 2 = v 2 v 2 = 25 40 1 5 ( 2 6 ) = 1 10 ( 1 3 ) {\displaystyle v_{2}={\frac {v_{2}^{\prime }}{\left\|v_{2}^{\prime }\right\|}}={\sqrt {\frac {25}{40}}}\cdot {\frac {1}{5}}{\begin{pmatrix}-2\\6\end{pmatrix}}={\frac {1}{\sqrt {10}}}\cdot {\begin{pmatrix}-1\\3\end{pmatrix}}}

Anmerkungen

Eine besondere Eigenschaft der beiden Verfahren ist, dass nach jedem Zwischenschritt die bisher berechneten Vektoren v 1 , , v i {\displaystyle v_{1},\dots ,v_{i}} den gleichen Vektorraum erzeugen wie die Vektoren w 1 , , w i {\displaystyle w_{1},\dots ,w_{i}} . Die Vektoren v 1 , , v i {\displaystyle v_{1},\dots ,v_{i}} bilden also eine Orthogonal- bzw. Orthonormalbasis der entsprechenden Untervektorräume. Anders ausgedrückt ist die Transformationsmatrix, die die Koordinaten des einen Systems im anderen ausdrückt, eine rechtsobere Dreiecksmatrix. Diese hat außerdem eine positive Determinante, daher hat die resultierende Orthogonal- bzw. Orthonormalbasis die gleiche Orientierung wie die Ausgangsbasis. Fasst man die orthonormalen Vektoren v 1 , , v n {\displaystyle v_{1},\dots ,v_{n}} als Spalten einer Matrix Q zusammen, ebenso die Vektoren des Ausgangssystems w 1 , , w n {\displaystyle w_{1},\dots ,w_{n}} zu einer Matrix A, so gibt es eine Dreiecksmatrix R mit A=QR, es wird also eine QR-Zerlegung bestimmt. Dementsprechend kann das Ergebnis der Gram-Schmidt-Orthonormalisierung auch mit anderen Methoden zur QR-Zerlegung bestimmt werden, die mit Givens-Rotationen oder Householder-Spiegelungen arbeiten.

Berechnet man ein Orthonormalsystem von Hand, ist es oftmals einfacher, zunächst ein Orthogonalsystem auszurechnen und dann die einzelnen Vektoren zu normieren. Dadurch erspart man sich das zweifache Normieren und kann oftmals mit einfacheren Werten rechnen. Gegebenenfalls lohnt es sich, vor dem Erstellen des Orthogonalsystems/Orthonormalsystems das Gauß’sche Eliminationsverfahren durchzuführen.

Prinzip des Verfahrens

Sind die orthogonalen Vektoren v 1 , , v k 1 {\displaystyle v_{1},\ldots ,v_{k-1}} bereits bestimmt, versuchen wir, von w k {\displaystyle w_{k}} eine passende Linearkombination der Vektoren v 1 , , v k 1 {\displaystyle v_{1},\ldots ,v_{k-1}} abzuziehen, sodass der Differenzvektor

v k = w k i = 1 k 1 λ i v i {\displaystyle v_{k}=w_{k}-\sum _{i=1}^{k-1}\lambda _{i}v_{i}}

zu allen Vektoren v 1 , , v k 1 {\displaystyle v_{1},\ldots ,v_{k-1}} orthogonal wird. Dies ist gleichbedeutend damit, dass das Skalarprodukt v j , v k {\displaystyle \langle v_{j},v_{k}\rangle } für alle j = 1 , , k 1 {\displaystyle j=1,\ldots ,k-1} den Wert 0 ergibt. Eine solche Linearkombination ergibt sich, wenn für jedes i {\displaystyle i} der Ausdruck

λ i = v i , w k v i , v i {\displaystyle \lambda _{i}={\frac {\langle v_{i},w_{k}\rangle }{\langle v_{i},v_{i}\rangle }}}

gewählt wird. Eine Kontrollrechnung zeigt, dass dadurch alle Skalarprodukte v j , v k {\displaystyle \langle v_{j},v_{k}\rangle } mit j k {\displaystyle j\neq k} den Wert 0 annehmen:

v j , v k = v j , w k i = 1 k 1 λ i v i = v j , w k i = 1 k 1 v i , w k v i , v i v j , v i = v j , w k v j , w k = 0 {\displaystyle {\begin{aligned}\langle v_{j},v_{k}\rangle &=\left\langle v_{j},w_{k}-\sum _{i=1}^{k-1}\lambda _{i}v_{i}\right\rangle \\&=\langle v_{j},w_{k}\rangle -\sum _{i=1}^{k-1}{\frac {\langle v_{i},w_{k}\rangle }{\langle v_{i},v_{i}\rangle }}\langle v_{j},v_{i}\rangle \\&=\langle v_{j},w_{k}\rangle -\langle v_{j},w_{k}\rangle \\&=0\end{aligned}}}

Orthonormalisierung unendlicher Systeme von Vektoren

In einem beliebigen Hilbertraum H {\displaystyle H} lässt sich das Verfahren auch auf unendliche Systeme unabhängiger Vektoren anwenden, wobei die Unabhängigkeit in dem Sinne zu verstehen ist, dass kein Element im Abschluss der linearen Hülle der übrigen Vektoren liegt. Den Fall eines abzählbaren Systems (d. h. H {\displaystyle H} ist ein separabler Hilbertraum) kann direkt auf den oben dargestellten endlichen Fall zurückgeführt werden: Gegeben sei eine unabhängige Folge ( w n ) n N {\displaystyle \left(w_{n}\right)_{n\in \mathbb {N} }} , so erhält man eine entsprechende orthonormale Folge ( v n ) n N {\displaystyle \left(v_{n}\right)_{n\in \mathbb {N} }} , indem man für jedes n N {\displaystyle n\in \mathbb {N} } das obige Verfahren anwendet und v n {\displaystyle v_{n}} erhält. Allgemeiner kann jedes unabhängige System nach dem Wohlordnungssatz als Folge ( w α ) α < d {\displaystyle \left(w_{\alpha }\right)_{\alpha <d}} für eine Kardinalzahl d {\displaystyle d} und Ordinalzahlen α {\displaystyle \alpha } angesehen werden (im Falle einer dichten linearen Hülle des unabhängigen Systems ist d {\displaystyle d} gerade die Dimension von H {\displaystyle H} ). Bezeichne nun π A : H A {\displaystyle \pi _{A}\colon H\to A} die orthogonale Projektion auf einen abgeschlossenen Teilraum A {\displaystyle A} , die aufgrund der Vollständigkeit des Raumes stets existiert, und x ^ {\displaystyle {\hat {x}}} bezeichne die Normierung x x {\displaystyle \textstyle {\frac {x}{\left\|x\right\|}}} . So ergibt sich ein Orthonormalsystem ( v α ) α < d {\displaystyle \left(v_{\alpha }\right)_{\alpha <d}} durch

A α := span ( { w β : β < α } ) ¯ {\displaystyle A_{\alpha }:={\overline {\operatorname {span} \left(\left\{w_{\beta }\colon \beta <\alpha \right\}\right)}}}
v α := ( w α π A α ( w α ) ) ^ {\displaystyle v_{\alpha }:={\widehat {\left(w_{\alpha }-\pi _{A_{\alpha }}\left(w_{\alpha }\right)\right)}}} .

Per transfiniter Induktion lässt sich dann zeigen, dass A α = span ( { v β : β < α } ) ¯ {\displaystyle A_{\alpha }={\overline {\operatorname {span} \left(\left\{v_{\beta }\colon \beta <\alpha \right\}\right)}}} , sogar für α = d {\displaystyle \alpha =d} . Expliziter lässt sich das Verfahren per transfiniter Rekursion wie folgt schreiben:

v α := ( w α β < α v β , w α v β ) ^ {\displaystyle v_{\alpha }:={\widehat {\left(w_{\alpha }-\sum _{\beta <\alpha }\langle v_{\beta },w_{\alpha }\rangle \cdot v_{\beta }\right)}}}

Hierbei ist die Summe aufgrund der besselschen Ungleichung wohldefiniert (insbesondere sind stets nur abzählbar viele Summanden ungleich Null).

Literatur

  • K. Kirchgessner, M. Schreck: Vektoranalysis für Dummies. Das Pocketbuch Paperback . Wiley-VCH, 2012. ISBN 978-3-527-70742-3