Метод Гаусса

Прямые методы решения СЛАУ: метод Гаусса.

Рассмотрим СЛАУ (2), состоящую из n уравнений с n неизвестными:

(2)

Метод Гаусса или метод последовательного исключения неизвестных наиболее распространенный из точных (прямых) методов решения СЛАУ.
Прямой ход приводит систему (2) к эквивалентной ей системе  вида (2’).

()

Для этого сначала первое неизвестное исключают из второго и последующих уравнений системы, затем второе неизвестное исключают из третьего и последующих уравнений и так далее. Таким образом, в последнем уравнении остается только одно неизвестное. Для реализации прямого хода используют следующие известные правила:
-  любое уравнение системы можно умножить на постоянный коэффициент;
-  можно сложить два любых уравнения системы и результат записать вместо одного из этих уравнений.
Переход от системы (2) к системе () возможен при выполнении следующих преобразований. Пусть  (если это не так, то можно поменять местами два уравнения системы). Разделим все члены первого уравнения системы (2) на , все члены второго уравнения на , третьего – на , и так далее. Если какой-то из этих коэффициентов равен нулю, то соответствующее уравнение не преобразовывается. Затем вычтем из второго, третьего , …, n-ого уравнения соответствующие части первого, получим


Первое уравнение оставим без изменений, а оставшиеся преобразуем аналогично. Так последовательно систему (2) приводим к виду ().
Обратный ход: последовательно вычисляют значения всех неизвестных, начиная с последнего.
Пример. Решить СЛАУ    методом Гаусса.
Решение. Прямой ход.
Разделим все члены первого уравнения на 8, получим: .
Вычтем из второго и третьего уравнений первое: .
Разделим все члены второго уравнения на , а третьего – на , получим
.
Вычтем из третьего уравнения второе:
Прямой ход завершен.
Обратный ход: выразим из последнего уравнения системы .
.
Из второго уравнения выразим .
Из первого уравнения выразим .
Получаем следующее решение системы: .
Убедимся, что найдено верное решение системы, подставив его в исходную систему уравнений:
.

 

 

program Gaus;
uses crt;
type
Mat=array [1..4,1..5] of real;
MatA=array [1..51] of real;
var i,j,n,str,stlb:integer;
A0,A:Mat;
Ans,dAns:MatA;
S,t:real;

begin
clrscr;
write ('Введите колличество строк:');
readln (str);
write ('Введите колличество столбцов:');
readln (stlb);
writeln ('Ввод матрицы:');
for i:=1 to str do begin
for j:=1 to stlb do begin
if j<>stlb then begin
write ('Введите а(',i,';',j,'):');
readln (A[i,j]);
A0[i,j]:=A[i,j];
end
else begin
write ('Введите элемент матрицы b',i,':');
readln (A[i,j]);
A0[i,j]:=A[i,j];
end;
end
end;
writeln ('Матрица A:');
for i:=1 to str do begin
for j:=1 to stlb do
write (A[i,j]:6:2,' ');
writeln
end;
for n:=1 to str do begin
for i:=n+1 to str do begin
t:=A0[i,n]/A0[n,n];
for j:=n+1 to stlb do
A0[i,j]:=A0[i,j]-A0[n,j]*t;
end
end;
Ans[str]:=A0[str,stlb]/A0[str,stlb-1];
for i:=n downto 1 do begin
S:=0;
for j:=stlb downto i+1 do
S:=S+A0[i,j]*Ans[j];
Ans[i]:=(A0[i,stlb]-S)/A0[i,j-1];
end;
writeln ('Ответ:');
for i:=1 to str do
writeln ('x',i,'=',Ans[i]:4:2);
for i:=1 to str do begin
for j:=1 to str do
dAns[i]:=dAns[i]+Ans[j]*A[i,j];
end;
writeln;
for i:=1 to str do
writeln ('Проверка b',i,'=',dAns[i]:4:2);
writeln;
for i:=1 to str do
writeln ('Различие b',i,'=',A[i,stlb]-dAns[i]:4:2);
end.


На Главную

Hosted by uCoz