Метод Гаусса — Зайделя[1][2] є класичним ітераційним методом розв'язку системи лінійних рівнянь.
Візьмемо систему:
, де
Або
І покажемо, як її можна розв'язати за допомогою методу Гаусса — Зайделя.
Щоб пояснити зміст методу, перепишемо задачу у вигляді:

Тут в
-му рівнянні ми перенесли в праву частину всі члени, що містять
, для
. Отримана система може бути представлена:
,
де в прийнятих позначеннях D означає матрицю, у якої на головній діагоналі стоять відповідні елементи матриці A, а всі інші — нулі; тоді як матриці U та L містять верхню і нижню трикутні частини A, на головній діагоналі яких нулі.
Ітеративний процес в методі Гаусса — Зайделя будується за формулою

після вибору відповідного початкового наближення
.
Метод Гаусса — Зайделя можна розглядати як модифікацію методу Якобі. Основна ідея модифікації полягає в тому, що нові значення
використовуються тут одразу ж у міру отримання, в той час як у методі Якобі вони не використовуються до наступної ітерації:

де
Таким чином i-й компонент
-го наближення обчислюється за формулою:

Наведемо достатню умову збіжності методу.
Умова завершення ітераційного процесу Гаусса — Зайделя при досягненні точності
у спрощеній формі має вигляд:

Точніша умова завершення ітераційного процесу має вигляд

і потребує більше обчислень. Добре підходить для розріджених матриць.
// Умова завершення
bool converge(double *xk, double* xkp)
{
bool b = true;
for (int i = 0; i < n; i++)
{
if (fabs(xk[i]-xkp[i]) > eps)
{
b = false;
break;
}
}
return b;
}
while(!converge(x,p))
{
for(int i = 0; i < n; i++)
{
var = 0;
for(int j = 0; j < n; j++)
{
if(j != i)
var += (a[i][j]*x[j]);
}
p[i] = x[i];
x[i]=(b[i] - var)/a[i][i];
}
}