
- •Содержание
- •Лабораторная работа № 1
- •Программный вывод:
- •Лабораторная работа № 2
- •Программный вывод:
- •Лабораторная работа № 3
- •Программный вывод:
- •Лабораторная работа № 4
- •Программный вывод:
- •Лабораторная работа № 5
- •Программный вывод:
- •Лабораторная работа № 6
- •Код программы: метод Зейделя
- •Лабораторная работа № 7
- •Оценка погрешности приближения f(eps).
- •Контрольная работа № 2
Код программы: метод Зейделя
{--- Решение системы линейных уравнений метолм (!) Зейделя ---}
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.