Matlab / Octave-Lösungsmatrix mit Gauß Seidel nicht konvergierend

349
Dean P

Etwas völlig Unmögliches passiert. Ich habe den folgenden Code mehrmals in derselben Matrix ausgeführt und bin mit Hilfe der Gauß-Seidel-Methode innerhalb von 10 Iterationen immer zu einer Lösung konvergiert.

Meine Gauß-Seidel-Funktionsdefinition lautet:

function xnew = gauss_seidel(A, b, xold) n = size(A)(1); At = A; xnew = xold; for i = 1 : n At(n, n) = 0; end for i = 1 : n xnew(i) = (b(i) - At(i, :)*xnew)/A(i, i); end endfunction 

Einrichten der Koeffizientenmatrix, des Lösungsvektors und des anfänglichen Näherungsvektors:

A = [20 1 -1; 1 -10 1; -1 1 10]; b = [17 13 18]'; x = [0 0 0]'; 

Verwendung der Gauß-Seidel-Methode:

>> x = gauss_seidel(A, b, x) Test x =  0.85000 -1.21500 2.00650  >> x = gauss_seidel(A, b, x) Test x =  0.16107 0.13176 1.80293  >> x = gauss_seidel(A, b, x) Test x =  0.77248 -1.17422 1.99467  >> x = gauss_seidel(A, b, x) Test x =  0.235961 0.097279 1.813868 

etc ... etc ... Kann mir jemand bitte zeigen, welchen Fehler ich möglicherweise mache und der nicht zulässt, dass mein Code zusammenläuft?

0

1 Antwort auf die Frage

0
Dean P

Natürlich ist das Unmögliche nicht möglich. Nach einem ungewöhnlichen Unfall tippte ich die falschen Zeichen. Ein Teil des Codes sollte gleich (i, i) sein

function xnew = gauss_seidel(A, b, xold) n = size(A)(1); At = A; xnew = xold; for i = 1 : n At(n, n) = 0; //THIS SHOULD EQUAL (i, i) end for i = 1 : n xnew(i) = (b(i) - At(i, :)*xnew)/A(i, i); end endfunction