Метод Гаусса

Алгоритм метода Гаусса

Блок – схема метода Гаусса

 

Программа решения СЛАУ по методу Гаусса

 

program GAUS;

uses crt;

var a: array [1..20,1..21] of real;

x: array [1..20] of real;

r,aik : real;

n,i,j,k,l : integer;

Begin

clrscr;

{--------------- Ввод и вывод исходных данных -----------------}

write(' Введи число неизвестных n='); readln(n);

for i:=1 to n do

for j:=1 to n+1 do

Begin

write(' a(',i,',',j,')=');

read (a[i,j]);

if j=n+1 then writeln;

end;

writeln(' Коэффициенты системы уравнений ');

for i:=1 to n do

for j:=1 to n+1 do

Begin

if j=n+1 then writeln(' a(',i,',',j,')=', a[i,j]:8:3)

else write(' a(',i,',',j,')=', a[i,j]:8:3);

end;

{--------------------- Прямой ход метода Гаусса -----------------}

for k:=1 to n-1 do

Begin

for i:=k+1 to n do

for j:=k to n+1 do

Begin

if j=k then aik:=a[i,k];

a[i,j]:= a[i,j] - (aik/a[k,k]) * a[k,j];

end;

end;

{--------------------- Обратный ход метода Гаусса -----------------}

x[n]:=(a[n,n+1])/a[n,n];

writeln;

writeln( ' Корни системы:');

writeln( ' x[', n ,']=', x[n]:8:3);

for k:=n-1 downto 1 do

Begin

r:=0.0;

l:=k+1;

Repeat

r:=r+a[k,l]*x[l];

l:=l+1

until l>n;

{------------ Корни системы---------}

x[k]:=(a[k,n+1]-r)/a[k,k];

writeln(' x[', k ,']=', x[k]:8:3);

end;

writeln;

readkey;

End.

Метод Гаусса с выбором главного элемента
(максимального по модулю элемента по столбцу)

 

program GausGlEl;

uses crt;

var a: array [1..20,1..21] of real;

x: array [1..20] of real;

r,aik,max,y : real;

n,i,j,k,l,imax : integer;

Begin

clrscr;

{--------------- Ввод и вывод исходных данных -----------------}

write(' Введи число неизвестных n='); readln(n);

for i:=1 to n do

for j:=1 to n+1 do

Begin

write(' a(',i,',',j,')=');

read (a[i,j]);

if j=n+1 then writeln;

end;

writeln(' Коэффициенты системы уравнений ');

for i:=1 to n do

for j:=1 to n+1 do

Begin

if j=n+1 then writeln(' a(',i,',',j,')=', a[i,j]:8:3)

else write(' a(',i,',',j,')=', a[i,j]:8:3);

end;

readkey;

{----------------------- Прямой ход метода Гаусса ----------------------}

for k:=1 to n-1 do

{--- Поиск МАХ (главного) элемента и перестановка уравнений ---}

Begin

max:=abs(a[k,k]); imax:=k;

for i:=k+1 to n do

Begin

if abs(a[i,k]) > max then

Begin

max:= abs(a[i,k]);

imax:= i;

end;

end;

for j:=k to n+1 do

Begin

y:=a[k,j];

a[k,j]:=a[imax,j];

{write(' a(imax=',imax,',',j,')=', a[imax,j]:8:3);}

a[imax,j]:=y;

end;

{------------- Преобразование уравнений -----------------}

readkey;

writeln('Шаг прямого хода К=', k);

writeln(' Коэффициенты системы после перестановки уравнений');

for i:=1 to n do

for j:=1 to n+1 do

Begin

if j=n+1 then writeln(' a(',i,',',j,')=', a[i,j]:8:3)

else write(' a(',i,',',j,')=', a[i,j]:8:3);

end;

for i:=k+1 to n do

for j:=k to n+1 do

Begin

if j=k then aik:=a[i,k];

a[i,j]:= a[i,j] - (aik/a[k,k]) * a[k,j];

end;

writeln(' К-ты системы после ', k , '-го шага преобразования');

for i:=1 to n do

for j:=1 to n+1 do

Begin

if j=n+1 then writeln(' a(',i,',',j,')=', a[i,j]:8:3)

else write(' a(',i,',',j,')=', a[i,j]:8:3);

end;

end;

{------------------------ Обратный ход метода Гаусса -----------------}

x[n]:=(a[n,n+1])/a[n,n];

writeln;

writeln( ' Корни системы:');

writeln( ' x[', n ,']=', x[n]:8:3);

for k:=n-1 downto 1 do

Begin

r:=0.0;

l:=k+1;

Repeat

r:=r+a[k,l]*x[l];

l:=l+1

until l>n;

{------------ Корни системы---------}

x[k]:=(a[k,n+1]-r)/a[k,k];

writeln(' x[', k ,']=', x[k]:8:3);

end;

writeln;

readkey;

End.

 

П р и м е р. Решить систему уравнений:

Решение по программе: