Басылым: төртінші -бет



бет16/47
Дата29.06.2017
өлшемі19,22 Mb.
#20661
1   ...   12   13   14   15   16   17   18   19   ...   47

Дәріс 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

Бақылау сұрақтары:


  1. Сызықтық теңдеулер жүйесінің жалғыз шешімінің болуының жеткілікті және қажетті шарты?

  2. Сызықтық теңдеулер жүйесін есептеудің дәл жуық әдістері?

  3. Зейдель әдісі дәл әдіс пе, әлде жуық әдіс пе?

  4. Зейдель итерациондық әдістерінің жинақталуының жеткілікті шарты.



Достарыңызбен бөлісу:
1   ...   12   13   14   15   16   17   18   19   ...   47




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет