Метод Гаусса-Зейделя

Автор: | 06.01.2018

Данный метод является одним из самых распространенных итерационных методов решения СЛАУ, поскольку он отличается простотой и легкостью программирования. Рассмотрим его суть. Допустим, диагональные коэффициенты исходной матрицы {aij}отличны от нуля (в противном случае можно переставить местами уравнения исходной системы). Представим исходную систему (2.1) в следующем виде:

Метод Гаусса-Зейделя (2.5)

Если теперь задать для неизвестных их начальные приближенные значения Метод Гаусса-Зейделя , то система (2.5) позволяет вычислить более точные значения неизвестных на первом шаге (на первой итерации):

Метод Гаусса-Зейделя (2.6)

Используя найденные значения неизвестных, можно еще более уточнить их на второй итерации:

Метод Гаусса-Зейделя (2.7)

и так далее.

В данном методе для нахождения значения i-го неизвестного на каждой итерации используются значения предыдущих неизвестных, уже найденные на данной итерации. Общую формулу определения i-го неизвестного на k-й итерации для системы n уравнений можно записать так:

Метод Гаусса-Зейделя
i = 1, 2, … , n; k = 1, 2, …
(2.8)

Итерационный процесс продолжается до тех пор, пока все значения xi(k),не станут достаточно близкими к xi(k-1). Близость этих значений можно охарактеризовать максимальной абсолютной величиной их разности d. Тогда при заданной точности вычислений e > 0 критерий окончания итерационного процесса можно записать в виде

Метод Гаусса-Зейделя Метод Гаусса-Зейделя . (2.9)

При выполнении этого условия итерационный процесс называется сходящимся. В этом случае максимальные разности между значениями соответствующих неизвестных в двух последовательных итерациях убывают, а сами значения стремятся к решению системы.

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

Метод Гаусса-Зейделя , Метод Гаусса-Зейделя (2.10)

При этом хотя бы для одного уравнения неравенство (2.10) должно выполняться строго.

В качестве примера рассмотрим решение методом Гаусса-Зейделя системы (2.2). Заметим, что достаточное условие сходимости итерационного процесса (2.10) для этой системы соблюдается. Запишем исходную систему в виде

Метод Гаусса-Зейделя

В качестве начальных приближений возьмем нули, т.е. примем x2(0) = x3(0)= 0.

Найдем значения неизвестных на первой итерации:

Метод Гаусса-Зейделя

Далее произведем вторую итерацию:

Метод Гаусса-Зейделя

Производя аналогично третью и последующие итерации, найдем:

x1(3) = 0,984; x2(3) = 1,981; x3(3) = 2,953;

x1(4) = 1,015; x2(4) = 1,992; x3(4) = 2,988;

x1(5) = 0,999; x2(4) = 1,993; x3(3) = 2,997.

Нетрудно заметить, что разности между значениями соответствующих неизвестных в процессе итераций убывают, следовательно, процесс решения сходящийся, что и следовало ожидать. Если принять точность вычислений e = 0,02, то итерации следует закончить. При увеличении заданной точности вычисления корней, число итераций возрастает, например, при e = 0,00001 следует выполнить 11 итераций, а результат будет x1(11) = 1,000000; x2(11) = 1,999998; x3(11) = 2,999999.


Программа для решения СЛАУ методом Гаусса-Зейделя приведена ниже. Поскольку при некорректной постановке задачи количество итераций может стать излишне большим, в программе предусмотрено прекращение итерационного процесса при превышении заранее заданного предельного числа итераций.

program SLAU2; {Решение системы методом Гаусса-Зейделя}

label 1,2,3;

const n=3;

var a:array [1..n,1..n] of real;

b,x:array [1..n] of real;

i,j,k,m:integer;

e,s,d,d1,c:real;

Begin

{Ввод исходных данных}

for i:=1 to n do

Begin

writeln (‘Введите коэффициенты уравнения’,i);

for j:=1 to n do read (a[i,j]);

writeln (‘Введите свободный член уравнения’,i);

readln (b[i]);

end;

writeln ('Введите точность');readln (e);

writeln ('Введите допустимое кол-во итераций');readln (m);

for i:=2 to n do x[i]:=0;

{Решение системы}

k:=1;

Repeat

d1:=0;

for i:=1 to n do

Begin

s:=0;

for j:=1 to n do

Begin

if i=j then goto 1;

s:=s+a[i,j]*x[j];

1: end;

c:=(b[i]-s)/a[i,i];

d:=abs(c-x[i]);

if d1

x[i]:=c;

end;

k:=k+1;

if k>m then goto 2;

until d1

{Вывод результатов}

writeln (‘решение системы’);

for i:=1 to n do write (x[i]:8:4);

writeln; goto 3;

2: writeln ('Количество итераций выше допустимого');

End.

Задания. Решить систему линейных алгебраических уравнений.

Таблица 3.

№ варианта Система Метод решения
Метод Гаусса-Зейделя Метод Гаусса
Метод Гаусса-Зейделя Метод Гаусса-Зейделя ( Метод Гаусса-Зейделя )
Метод Гаусса-Зейделя Метод Гаусса
Метод Гаусса-Зейделя Метод Гаусса-Зейделя ( Метод Гаусса-Зейделя )
Метод Гаусса-Зейделя Метод Гаусса
Метод Гаусса-Зейделя Метод Гаусса-Зейделя ( Метод Гаусса-Зейделя )
Метод Гаусса-Зейделя Метод Гаусса
Метод Гаусса-Зейделя Метод Гаусса-Зейделя ( Метод Гаусса-Зейделя )
Метод Гаусса-Зейделя Метод Гаусса
Метод Гаусса-Зейделя Метод Гаусса-Зейделя ( Метод Гаусса-Зейделя )

3. Аппроксимация функций с помощью метода

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *