Решение системы методом Гаусса-Зейделя

Листинг программы численного решения систем линейных и алгебраических уравнений методом Гаусса-Зейделя (с проверкой сходимости при невыполнении достаточного условия сходимости метода).
program Zejdel;
uses CRT;
var i,j,n,Kk,V,k:integer;
A,B:array [1..24,1..24] of real;
E,S,Cc,Xk,C,MaxC,max,M: real;
X,Ba,Bd: array [1..24] of real;
z:char;

procedure Matrln;
begin 
for var i:=1 to n do 
for var j:=1 to n do
read(A[i,j]);
end;

procedure Vectln;
begin
for var i:=1 to n do
read(Ba[i]);
end;

BEGIN
ClrScr;
Repeat
write('Vvedite nomer variant V=');
readln(V);
if V=0 then 
writeln('------------Testoviy primer----------')
else 
writeln('------------Variant',V,'----------');
writeln('------------VVOD ISHODNIX DANNIX :----------');
write('Vvedite tochnost vichisleniu, E=');
readln(E);
write('Vvedite razmernost sistemi, N=');
readln(N);
write('Vvodite postrochno matrix A sistemi');
Matrln;
write('Vvodite vector stolbec B sistemi');
Vectln;

for i:=1 to n do begin
B[i,i]:=0;
for j:=1 to n do
if j<>i then B[i,j]:=-(A[i,j]/A[i,j]);
Bd[i]:=Ba[i]/A[i,i];
end;

C:=0;
for i:=1 to n do begin
X[i]:=Bd[i];
S:=0;
for j:=1 to n do
S:=S+abs(B[i,j]);
if C < = S then C:=S;
end;
writeln('C=',C:6:4);

if C > =1 then begin
 writeln('Yslovie sxodimosti ne vipoln9ets9');
 writeln('Хotite prodolshit vichisleni9,-'+'vvedite kolichestvoiterachiy');
 write('(Esli net -Kk=0)Kk= ');
 readln(Kk);
 end;
 max:=10;
 maxC:=10;
 
 while
 ((C < 1)and (max>E))or((MaxC>=max)and(k<=Kk)and(max>E))
 do begin
 inc(K);
 writeln('Iterachiya k=',k);
 max:=0;M:=0;
 for i:=1 to n do begin;
 Cc:=0;Xk:=X[i]; 
 for j:=1 to n do
 Cc:=Cc+B[i,j]*X[j];
 X[i]:=Bd[i]+Cc;
 M:=abs(X[i]-Xk); writeln(m:6:4); readln;
 if max < M then max:=M;
 end;
 if k=1 then MaxC:=max;
 writeln('|x-x',k-1,'|=',MaxC:6:4);
 writeln('|x-x',k,'|=',max:6:4);
 end;
 
 
 if MaxC < max then writeln('Iterac process rasxodits9')
 else if k=Kk then begin
 writeln('Zadanoe kolic iterashiy',Kk,'+isherpano');
 writeln('Polyshen rezyltat:');
 write('X=[');
 for i:=1 to n do write(X[i]:8:4);
 writeln(']')
 end
 else begin
 writeln('Reshenie dostignyto na',k,'-u iterashii');
 write('X= [');
 for i:=1 to n do write(X[i]:8:4);
 writeln(']');
 end;
 write('Bydete prodolshat vichisleniy?(Y/N) Y');
 z:=ReadKey;
 writeln(z);
 until (z='N') or(z='n');
 End.

Скрин выполнения программы

Комментарии     


    0
    Ринат: А на делфи есть такое же?
    Ответ: так просто подключите как модуль и будет вам на делфи
Онлайн всего: 38
Гостей: 38
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте