Метод Гаусса
Алгоритм метода Гаусса
Блок – схема метода Гаусса
Программа решения СЛАУ по методу Гаусса
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.
П р и м е р. Решить систему уравнений:
Решение по программе: