Если система линейных уравнений совместна (т.е. имеющая решения), то схема программы её решения можно записать так:
· Ввести коэффициенты и правые части уравнений;
· Выполнить прямой ход;
· Выполнить обратный ход;
· Вывести результаты.
При прямом ходе нужно: получить первое уравнение в виде, удобном для исключения , разделив полученное 1-е уравнение на коэффициент при ; исключить из уравнений с номерами 2, 3, …, n; получить второе уравнение в виде, удобном для исключения ; исключить из уравнений с номерами 3, …, n; получить n –1 уравнение в виде, удобном для получения ; исключить из уравнения с номером n.
Запишем схему программы этого фрагмента:
for i:=1 to n do
begin
Получить i-е уравнение в виде, удобном для исключения : исключить из уравнений с номерами i + 1, …, nс помощью i-го уравнения
end.
При обратном ходе из последнего уравнения находят Используя это значение, из предпоследнего n˗1 уравнения исключают и получают . Найденные значения переменных , , …, позволяют вычислить .
Детализируем этап обратного хода.
получить ;
for i:= n˗1 downto 1 do вычислить ;
вывести , …,
end.
Опираясь на разработанные схемы, запишем программу решения n линейных уравнений с n переменными методом Гаусса в предположении, что система совместна (n< = 10). Ввод данных осуществляется по строкам: коэффициенты первого уравнения и его правая часть, затем ˗ коэффициенты второго уравнения и его правая часть, затем ˗ коэффициенты второго уравнения и его правая часть и т.д.
Program Gauss;
Varn,I,j,l:integer; t:real; {Описания}
X:array[1..10] of real;
A:array[1..10,1..11] of real;
Begin
Read(n); {Числоуравнений}
For i:=1 to n do {Вводкоэффициентов}
For j:=1 to n+1 do {иправыхчастей}
Read (a[I,j]); {уравнений}
For i:=1 to n do
Begin
T:=a[I,j];
For j:=I to n+1 do {Делениеi-го уравнения}
A[I,j]:= a[I,j]/t {накоэффициентыприx[i]}
For l:=i+1 to n do
For j:= i+1 to n+1 do
A[l,j]: = a[l,j] ˗ a[I,j]*a[l,i]
End;
X[n]: = a[n,n+1]; {Вычисление x[n]}
For i: = n˗1 downto 1 do {Вычислениеx[i]}
Begin
X[i]: = a[I,n+1];
For j: = i+1 to n do
X[i]: = x[i] ˗ a[I,j]*x[j]
End;
For I: = 1 to n do
Writeln (x[i]); {Выводx[i]}
End.