SOR-Verfahren

Aus testwiki
Version vom 18. September 2019, 16:09 Uhr von imported>PerfektesChaos (tk k)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Das „Successive Over-Relaxation“-Verfahren (Überrelaxationsverfahren) oder SOR-Verfahren ist ein Algorithmus der numerischen Mathematik zur näherungsweisen Lösung von linearen Gleichungssystemen. Es ist, wie das Gauß-Seidel-Verfahren und das Jacobi-Verfahren, ein spezielles Splitting-Verfahren der Form A=B+(AB) mit B=(1/ω)D+L.

Beschreibung des Verfahrens

Gegeben ist ein quadratisches lineares Gleichungssystem Ax=b mit n Gleichungen und der Unbekannten x. Dabei sind

A=(a11a12a1na21a22a2nan1an2ann),x=(x1x2xn),b=(b1b2bn).

Das SOR-Verfahren löst diese Gleichung nun ausgehend von einem Startvektor x0 nach der Iterationsvorschrift

xk(m+1)=(1ω)xk(m)+ωakk(bki>kakixi(m)i<kakixi(m+1)),k=1,2,,n.

Der reelle Überrelaxationsparameter ω(0,2) sorgt dafür, dass das Verfahren schneller konvergiert als das Gauß-Seidel-Verfahren, das ein Spezialfall dieser Formel mit ω=1 ist.

Algorithmus

Als Algorithmusskizze mit Abbruchbedingung bietet sich an:

wähle x0
wiederhole
fehler:=0
für k=1 bis n
xk(m+1):=(1ω)xk(m)+ωak;k(bki=1k1ak;ixi(m+1)i=k+1nak;ixi(m))
fehler:=max(fehler,|xk(m+1)xk(m)|)
nächstes k
m:=m+1
bis fehler<fehlerschranke

Dabei wurde eine Fehlerschranke als Eingangsgröße des Algorithmus angenommen; die Näherungslösung ist die vektorielle Rückgabegröße x(m). Die Fehlerschranke misst hier, welche Größe die letzte Änderung des Variablenvektors hatte.

Bei dünnbesetzten Matrizen reduziert sich der Aufwand des Verfahrens pro Iteration deutlich.

Herleitung

Das SOR-Verfahren ergibt sich mittels Relaxation des Gauß-Seidel-Verfahrens:

xk(m+1):=(1ω)xk(m)+ωak;k(bki=1k1ak;ixi(m+1)i=k+1nak;ixi(m)),

für ω=1 erhält man also Gauß-Seidel zurück. Um das Verfahren zu analysieren, bietet sich die Formulierung als Splitting-Verfahren an, die es erlaubt, die Eigenschaften des Verfahrens zu analysieren. Die Matrix A wird dazu als Summe einer Diagonalmatrix D sowie zweier strikter Dreiecksmatrizen L und R geschrieben:

A=D+L+R

mit

D=(a11000a22000ann),L=(000a2100an1an20),R=(0a12a1n00a2n000).

Das lineare Gleichungssystem ist dann äquivalent zu

(D+ωL)x=ωb(ωR+(ω1)D)x

mit einem ω>0. Die Iterationsmatrix ist dann also

M=(D+ωL)1(ωR+(ω1)D)

und das Verfahren ist konsistent und konvergiert genau dann, wenn der Spektralradius ρ(M)<1 ist.

Obige Formulierung zur komponentenweisen Berechnung der xi(m) erhält man aus dieser Matrix-Darstellung, wenn man die Dreiecksgestalt der Matrix (D+ωL) ausnutzt. Diese Matrix lässt sich direkt durch Vorwärtseinsetzen invertieren.

Konvergenz

Man kann zeigen, dass das Verfahren für eine symmetrische positiv definite Matrix A für jedes ω(0,2) konvergiert. Um die Konvergenz gegenüber dem Gauß-Seidel-Verfahren zu beschleunigen, verwendet man heuristische Werte zwischen 1,5 und 2,0. Die optimale Wahl hängt von der Koeffizientenmatrix A ab. Werte ω<1 können gewählt werden, um eine Lösung zu stabilisieren, die ansonsten leicht divergiert.

Das Theorem von Kahan (1958) zeigt, dass für ω außerhalb des Intervalls (0,2) keine Konvergenz mehr vorliegt.

Es kann gezeigt werden, dass der optimale Relaxationsparameter durch ωopt=21+1ρ2 gegeben ist, wobei ρ der Spektralradius der Verfahrensmatrix D1(L+R) des Jacobi-Verfahrens ist.[1]

Literatur

  • Andreas Meister: Numerik linearer Gleichungssysteme. 3. Auflage. Vieweg, 2007, ISBN 3-8348-0431-2

Einzelnachweise

  1. Thomas Westermann: Modellbildung und Simulation. Springer, 2010.