Дәріс 7
Тақырыбы: Сызықты теңдеулер жүйесін шешу итерциялық әдістері: Зейдел әдісі.
Мақсаты: Зейдел әдісі туралы ұғым беру.
Сызықты алгебралық теңдеу жүйесін қарастырайық, яғни
және 1-ші өрнекті келтірейік:
Енді осы жүйедегі жақындаулар элементтерін х1, х2, ..., хn элементері арқылы белгілейік, ал кезекті жақындаулар элементтерін y1, y2, …, yn арқылы белгілейік. Сонда есептеуіш формула мына түрде болады:
Итерационды процестің әр бір қадамның у1 мәнің есептеу кезінде у1, у2, ..., уn алдында алынған мәні ескеріледі. Бұл мәселе Зейдел әдісінің негізгі ойы болып саналады. Осыған қарасты керекті есептеуіш формулаларды жазайық:
Сонымен сызықты алгебралық теңдеу жүйесін матрицалық түрде жазайық:
А∙Х=В,
Мұндағы: А – матрица коэффициенті,
В – вектор-баған бос мүшенің,
Х – белгісіздік вектор-баған.
Алгебралық есептеулер сияқты А-ны Ат арқылы белгілейік. Енді 11-шы жүйеінің оң және сол жақ бөлігін сол жақтан матрица Ат-ға көбейтейік, сонда келесі мынадай жүйе шығады:
Ат∙А∙Х= Ат∙В.
Шыққан жүйедегі Ат∙А көбейтіндісін С арқылы, ал Ат∙В көбейтіндісін D арқылы белгілейік, сонда келесі жаңартылған жүйе мынадай түрде болады:
С∙Х=D.
Мұндай түрдегі жүйені нормал деп атайды. Осы нормал жүйе «жақсы» қасиеттерге ие, олар мыналар:
С матрицаның коэффициенті белгісіз нормал жүйеде симметриалы болып табылады (яғни );
басты диоганальдағы барлық элементтегі С матрицасы нормал жүйеде оң болып саналады (яғни >0, і=1,2, ..., n).
Ең соңғы берілген ақиқат бойынша автоматты түрде 11-ші жүйені мына түрде жазуға болады:
(і=1,2, ..., n),
мұндағы
және
Осы жасалған жаңартулар келесіден шығады, яғни 12-ші және 13-ші эквивалентті нормал жүйе Зейделдің итерационды процеспен анықталған, мұнда осы жүйедегі кез келген бастапқы жақындаулардың шешімі әр уақытта бір шешімге келіп отырады.
Uses CRT;
Const
maxn = 10;
Type
Data = Real;
Matrix = Array[1..maxn, 1..maxn] of Data;
Vector = Array[1..maxn] of Data;
{ Процедура ввода расширенной матрицы системы }
Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector);
Var
i, j, r: Integer;
Begin
r := WhereY;
GotoXY(2, r);
Write('A');
For i := 1 to n do begin
GotoXY(i * 6 + 2, r);
Write(i);
GotoXY(1, r + i + 1);
Write(i:2);
end;
GotoXY((n + 1) * 6 + 2, r);
Write('b');
For i := 1 to n do begin
For j := 1 to n do begin
GotoXY(j * 6 + 2, r + i + 1);
Read(a[i, j]);
end;
GotoXY((n + 1) * 6 + 2, r + i + 1);
Read(b[i]);
end;
End;
{ Процедура вывода результатов }
Procedure WriteX(n :Integer; x: Vector);
Var
i: Integer;
Begin
For i := 1 to n do
Writeln('x', i, ' = ', x[i]);
End;
{ Функция, реализующая метод Зейделя }
Function Seidel(n: Integer; a: Matrix; b: Vector; var x: Vector; e: Data) :Boolean;
Var
i, j: Integer;
s1, s2, s, v, m: Data;
Begin
{ Исследуем сходимость }
For i := 1 to n do begin
s := 0;
For j := 1 to n do
If j <> i then
s := s + Abs(a[i, j]);
If s >= Abs(a[i, i]) then begin
Seidel := false;
Exit;
end;
end;
Repeat
m := 0;
For i := 1 to n do begin
{ Вычисляем суммы }
s1 := 0;
s2 := 0;
For j := 1 to i - 1 do
s1 := s1 + a[i, j] * x[j];
For j := i to n do
s2 := s2 + a[i, j] * x[j];
{ Вычисляем новое приближение и погрешность }
v := x[i];
x[i] := x[i] - (1 / a[i, i]) * (s1 + s2 - b[i]);
If Abs(v - x[i]) > m then
m := Abs(v - x[i]);
end;
Until m < e;
Seidel := true;
End;
Var
n, i: Integer;
a: Matrix;
b, x: Vector;
e: Data;
Begin
ClrScr;
Writeln('Программа решения систем линейных уравнений по методу Зейделя');
Writeln;
Writeln('Введите порядок матрицы системы (макс. 10)');
Repeat
Write('>');
Read(n);
Until (n > 0) and (n <= maxn);
Writeln;
Writeln('Введите точность вычислений');
Repeat
Write('>');
Read(e);
Until (e > 0) and (e < 1);
Writeln;
Writeln('Введите расширенную матрицу системы');
ReadSystem(n, a, b);
Writeln;
{ Предполагаем начальное приближение равным нулю }
For i := 1 to n do
x[i] := 0;
If Seidel(n, a, b, x, e) then begin
Writeln('Результат вычислений по методу Зейделя');
WriteX(n, x);
end
else
Writeln('Метод Зейделя не сходится для данной системы');
Writeln;
End.
Программа решения систем линейных уравнений по методу Зейделя
Введите порядок матрицы системы (макс. 10)
>4
Введите точность вычислений
>.000001
Введите расширенную матрицу системы
A 1 2 3 4 b
1 4.1 0.1 0.2 0.2 21.14
2 0.3 5.3 0.9 -0.1 -17.82
3 0.2 0.3 3.2 0.2 9.02
4 0.1 0.1 0.2 -9.1 17.08
Результат вычислений по методу Зейделя
x1 = 5.2000000008E+00
x2 = -4.2000000028E+00
x3 = 3.0000000003E+00
x4 = -1.8000000000E+00
Бақылау сұрақтары:
Сызықтық теңдеулер жүйесінің жалғыз шешімінің болуының жеткілікті және қажетті шарты?
Сызықтық теңдеулер жүйесін есептеудің дәл жуық әдістері?
Зейдель әдісі дәл әдіс пе, әлде жуық әдіс пе?
Зейдель итерациондық әдістерінің жинақталуының жеткілікті шарты.
Достарыңызбен бөлісу: |