Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ Ls Pro All 22-27.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.35 Mб
Скачать

Код программы: метод Зейделя

{--- Решение системы линейных уравнений метолм (!) Зейделя ---}

Program sistema_ziter_Asd_L6;

Uses Crt;

Const N=3; EPS=0.5*1e-3;

Type

Vec=array[1..N] of Extended;

Mas=Array[1..N,1..N] of Extended;

Var

i,j,k,it,m:Byte;

Nor_L,Nor_M,Nor_K,

Norma_X,Min_Nor:Extended;

s,Pogr:Extended;

a,a1:Mas;

b,b1,y,x:Vec;

{----------- приведение к виду x=b+ax ------------}

Procedure Pived(aa1:Mas; bb1:Vec; Var aa:Mas; Var bb:Vec);

Var

ii,jj:Byte;

Begin

For ii:=1 to N do

For jj:=1 to N do

Begin

If ii=jj

Then aa[ii,jj]:=0

Else aa[ii,jj]:=-aa1[ii,jj]/aa1[ii,ii];

End;

For ii:=1 to N do

bb[ii]:=bb1[ii]/aa1[ii,ii];

End;

{------------- норма матрицы по L ---------------}

Function Norma_L(aa:Mas):Extended;

Var

ii,jj:Byte;

Norma,ss:Extended;

Begin

Norma:=Abs(aa[1,1]);

For ii:=1 to N do

Begin

ss:=0;

For jj:=1 to N do

ss:=ss+Abs(aa[ii,jj]);

If Norma<ss

Then

Norma:=ss;

End;

Norma_L:=Norma

End;

{------------- ­ норма матрицы по M ---------------}

Function Norma_M(aa:Mas):Extended;

Var

ii,jj:Byte;

Norma,ss:Extended;

Begin

Norma:=Abs(aa[1,1]);

For jj:=1 to N do

Begin

ss:=0;

For ii:=1 to N do

ss:=ss+Abs(aa[ii,jj]);

If Norma<ss

Then Norma:=ss;

End;

Norma_M:=Norma

End;

{------------- ­ норма матрицы по K ---------------}

Function Norma_K(aa:Mas):Extended;

Var

ii,jj:Byte;

Norma:Extended;

Begin

Norma:=0;

For ii:=1 to N do

For jj:=1 to N do

Norma:=Norma+Sqr(aa[ii,jj]);

Norma_K:=Sqrt(Norma);

End;

{--------------- минимум из трех ------------------}

Procedure Min3(aa,bb,cc:Extended; Var min_3:Extended;Var kk:Byte);

Begin

If aa<bb

Then

If aa<cc

Then

Begin min_3:=aa; kk:=1 End

Else

Begin min_3:=cc; kk:=3 End

Else

If bb<cc

Then

Begin min_3:=bb; kk:=2 End

Else

Begin min_3:=cc; kk:=3 End;

End;

{-------------норма вектора---------------}

Function Norma_V(aa:Vec; kk:Byte):Extended;

Var

ii,jj:Byte;

Norma,ss:Extended;

Begin

Case kk of

1: Begin

Norma:=Abs(aa[1]);

For ii:=2 to N do

If Norma<Abs(aa[ii])

Then Norma:=Abs(aa[ii]);

End;

2: Begin

Norma:=0;

For ii:=1 to N do

Norma:=Norma+Abs(aa[ii]);

End;

3: Begin

Norma:=0;

For ii:=1 to N do

Norma:=Norma+Sqr(aa[ii]);

Norma:=Sqrt(Norma);

End;

End;{Case}

Norma_V:=Norma

End;

{**************************************************}

Begin

ClrScr;

{--- ввод элементов матрицы----}

WriteLn('введите элементы матрицы');

For i:=1 to N do

Begin

For j:=1 to N do

Begin

Write('a[',i,' ',j,'] = ');ReadLn(a1[i,j]);

End;

Write('b[',i:2,' ] = ');Readln(b1[i]);

Writeln;

End;

{--- приведение матрицы ---}

Pived(a1,b1,a,b);

for i:=1 to N do

Begin

for j:=1 to N do

Write(a[i,j]:8:3);

Write(' ',b[i]:8:3);

WriteLn

End;

{'—определение минимальной нормы --'}

Nor_L:=Norma_L(a);

Nor_M:=Norma_m(a);

Nor_K:=Norma_k(a);

Min3(Nor_L,Nor_M,Nor_K,Min_Nor,k);

WriteLn('Nor_L =',nor_L:7:4,' Nor_M =',nor_m:7:4,' Nor_K =',nor_k:7:4);

WriteLn('Min_Nor =',min_nor:7:4,' k =',k:2);

{'—итерационное вычисление реешния системы уравнений--'}

Pogr:=(1-Min_Nor)/Min_Nor*EPS;

it:=0;

For i:=1 to N do

x[i]:=b[i];

Repeat

For i:=1 to N do

y[i]:=x[i];

For i:=1 to N do

Begin

Inc(it);

s:=0;

For j:=1 to N do

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

x[i]:=b[i]+s;

End;

For i:=1 to N do

y[i]:=y[i]-x[i];

Norma_X:=Norma_V(y,k);

Until Norma_X<Pogr;

WriteLn('решение уравнений методом Зейделя');

For i:=1 to N do

Begin

WriteLn(' x[',i:2,' ] = ',x[i]:11:8);

End;

WriteLn('—число итераций = ',it:3,' --- погрешность = ',Pogr:11:8);

WriteLn('*******************************************************');

ReadLn;

End.