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