Matlab / Octave Solving Matrix с использованием Gauss Seidel не сходятся

341
Dean P

Происходит нечто совершенно невозможное. Я запускал следующий код несколько раз на одной и той же матрице и всегда сходился к решению с использованием метода Гаусса Зайделя в течение 10 итераций.

Мое определение функции Гаусса Зайделя:

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 

Настройка матрицы коэффициентов, вектора решения и начального приближенного вектора:

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

Используя метод Гаусса Зейделя:

>> 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 

и т. д. и т. д. Может кто-нибудь подсказать мне, какую ошибку я допускаю, которая не позволяет моему коду сходиться?

0

1 ответ на вопрос

0
Dean P

Конечно, невозможное невозможно. Странная авария заставила меня печатать не те символы. Часть кода ниже должна быть равна (i, i)

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 

Похожие вопросы