Es ist das Gleichungssystem
mit

zu lösen. Die Matrix
hat die Eigenwerte
.
- Bestimmen Sie den Spektralradius der Iterationsmatrix
für das Jacobi-Verfahren - Für den optimalen Relaxationsparameter
des SOR-Verfahrens gilt
.Bestimmen Sie
. - Schreiben Sie ein m-File („u51.m“), in dem Sie das Gleichungssystem mit dem Jacobi-, Gauß-Seidel- und SOR-Verfahren lösen. Verwenden Sie einen zufälligen Startvektor
. Führen Sie das SOR-Verfahren dabei einmal mit dem in b) bestimmten optimalen Relaxationsparameter aus sowie mit einem beliebigen weiteren Wert
. Führen Sie die Rechnungen für
jeweils zehnmal durch und bestimmen Sie für jedes der Verfahren die durchschnittliche Anzahl an Iterationen, die notwendig ist, um die Bedingung

zu erfüllen. Schreiben Sie das Ergebnis als Kommentar in Ihr m-File. Was fällt Ihnen bei den Iterationszahlen auf?
Hinweise:
In der Lösung zu Aufgabe c) darf der Backslash-Operator (“\”) nicht vorkommen. Orientieren Sie sich stattdessen an der komponentenweisen Darstellung der Verfahren.
Lösung
a )
Für die Iterationsmatrix des Jacobi-Verfahrens gilt:



Wir können die Iterationsmatrix auch schreiben als:

Daher ergeben sich die Eigenwerte aus den Eigenwerten von
:

Dieser Wert ist für
am größten. Der Spektralradius ist also:

b )
Wir können nun den Spektralradius berechnen:

Für die 49×49 Matrix erhalten wir:

c )
Matlab-Code:
N = 50; % Abmessung der quadratischen Matrix ist (N-1)
versuche = 10; % Anzahl der Versuche mit verschiedenen Zufallsvektoren
% Aufstellen des Gleichungssystems
v = -1 * ones(1, N - 1)';
v1 = 2 * ones(1, N - 1)';
A = spdiags([v, v1, v], -1 : 1, N - 1, N - 1);
A = full(A); % mit der vollständigen Matrix laufen die Verfahren schneller
b = ones(N - 1, 1);
% Berechnung der Iterationsmatrix (Jacobi) und des Spektralradius
v = -.5 * ones(1, N - 1)';
Mj = spdiags([v, v], -1 : 2: 1, N - 1, N - 1);
e = eig(Mj);
r = max(abs(e));
% Berechnung des optimalen Relaxationsparameters (SOR)
wOpt = 2 / (1 + sqrt(1 - r * r));
% Vektoren für die Anzahl der Iterationsschritte
itJacobi = zeros(versuche, 1);
itGSeidel = zeros(versuche, 1);
itSorOpt = zeros(versuche, 1); % optimal
itSorNO = zeros(versuche, 1); % nicht optimal
for versuch = 1 : versuche
% Zufälliger Startvektor und Abbruchkriterium
x0 = rand(N - 1, 1);
exit = 0.001 * norm((b - A * x0));
% Jacobi-Verfahren Komponentenweise
x1 = x0;
x2 = x0;
while norm(b - A * x2) >= exit
for i = 1 : N - 1
x2(i) = 1/A(i,i) * (b(i) - sum(A(i, 1:i-1)' .* x1(1:i-1)) ...
- sum(A(i, i+1:N-1)' .* x1(i+1:N-1)));
end
itJacobi(versuch) = itJacobi(versuch) + 1;
x1 = x2;
end % end Jacobi
% Gauß-Seidel-Verfahren Komponentenweise
x1 = x0;
x2 = x0;
while norm(b - A * x2) >= exit
for i = 1 : N - 1
x2(i) = 1/A(i,i) * (b(i) - sum(A(i, 1:i-1)' .* x2(1:i-1)) ...
- sum(A(i, i+1:N-1)' .* x1(i+1:N-1)));
end
itGSeidel(versuch) = itGSeidel(versuch) + 1;
x1 = x2;
end % end Gauß-Seidel
% SOR-Verfahren Komponentenweise, w_opt = 1.88183838983223
x1 = x0;
x2 = x0;
while norm(b - A * x2) >= exit
for i = 1 : N - 1
x2(i) = x1(i) + wOpt * 1/A(i,i) * (b(i) ...
- sum(A(i, 1:i-1)' .* x2(1:i-1)) ...
- sum(A(i, i:N-1)' .* x1(i:N-1)));
end
itSorOpt(versuch) = itSorOpt(versuch) + 1;
x1 = x2;
end % end SOR
% SOR-Verfahren Komponentenweise, w = 0.8
x1 = x0;
x2 = x0;
w = 0.8;
while norm(b - A * x2) >= exit
for i = 1 : N - 1
x2(i) = x1(i) + w * 1/A(i,i) * (b(i) ...
- sum(A(i, 1:i-1)' .* x2(1:i-1)) ...
- sum(A(i, i:N-1)' .* x1(i:N-1)));
end
itSorNO(versuch) = itSorNO(versuch) + 1;
x1 = x2;
end % end SOR
end % end versuch
itJacobiMed = sum(itJacobi) / versuche % 3359.6
itGSeidelMed = sum(itGSeidel) / versuche % 1678.3
itSorOptMed = sum(itSorOpt) / versuche % 84.7 bei w = w_opt
itSorNOMed = sum(itSorNO) / versuche % 2517.5 bei w = 0.8
toc % 45.360618 Sekunden
% Was fällt mir bei den Iterationszahlen auf?
%
% n Jacobi Gauß-Seidel SOR opt SOR2
% 5 32 16 8 25
% 10 133 67 17 101
% 15 304 153 25 230
% 20 539 267 34 401
%
% Jacobi: nötige Iterationsschritte steigen quadratisch
%
% Gauß-Seidel: Iterationsschritte vervierfachen sich bei Verdopplung von n
%
% SOR opt: Iterationsschritte steigen linear
%
% SOR2: Iterationsschritte vervierfachen sich bei Verdopplung von n


