Введение
Метод Гаусса (или метод исключения Гаусса) является одним из стандартных методов решения систем линейных алгебраических уравнений. Он основан на приведении системы к треугольному виду путем последовательного исключения переменных. В этой статье мы рассмотрим алгоритм реализации метода Гаусса на Паскале.
Алгоритм метода Гаусса
Рассмотрим систему линейных уравнений:
a[1,1] * x[1] + a[1,2] * x[2] + … + a[1,n] * x[n] = b[1]
a[2,1] * x[1] + a[2,2] * x[2] + … + a[2,n] * x[n] = b[2]
…
a[n,1] * x[1] + a[n,2] * x[2] + … + a[n,n] * x[n] = b[n]
Здесь a[i,j] и b[i] - известные коэффициенты.
Метод Гаусса заключается в приведении системы к треугольному виду, путем последовательного исключения переменных. То есть, на каждом шаге мы выбираем главный элемент, который будет использоваться для исключения других переменных. Затем, мы используем этот главный элемент для исключения переменных из всех последующих уравнений.
Алгоритм метода Гаусса можно описать следующим образом:
1. Для каждого i от 1 до n:
a. Найти строку j, такую что a[j,i] != 0 и j >= i
b. Если такой строки нет, то система не имеет единственного решения
c. Если j>i, то поменять местами уравнения i и j
2. Для каждого i от 1 до n-1:
a. Для всех j от i+1 до n:
i. Вычислить коэффициент k = a[j,i] / a[i,i]
ii. Вычесть из уравнения j уравнение i, умноженное на k
3. Система приведена к треугольному виду, т.е. матрица a стала верхнетреугольной.
Решить систему уравнений, используя метод обратного хода.
Реализация на Паскале
Реализация метода Гаусса на Паскале может выглядеть следующим образом:
procedure Gauss;
var
a: array [1..n, 1..n+1] of real;
x: array [1..n] of real;
i, j, k: integer;
p: real;
begin
// Ввод системы уравнений
for i := 1 to n do begin
for j := 1 to n+1 do begin
write('a[', i, ',', j, ']=');
readln(a[i,j]);
end;
end;
// Приведение системы к треугольному виду
for i := 1 to n do begin
// Поиск главного элемента
j := i;
while (j <= n) and (a[j,i] = 0) do
j := j+1;
if j > n then begin
writeln('Система не имеет единственного решения');
exit;
end;
if j <> i then begin
// Перемещение уравнений
for k := 1 to n+1 do begin
p := a[i,k];
a[i,k] := a[j,k];
a[j,k] := p;
end;
end;
// Исключение переменных
for j := i+1 to n do begin
p := a[j,i] / a[i,i];
for k := i+1 to n+1 do
a[j,k] := a[j,k] - p * a[i,k];
end;
end;
// Решение системы методом обратного хода
for i := n downto 1 do begin
x[i] := a[i,n+1];
for j := i+1 to n do
x[i] := x[i] - a[i,j] * x[j];
x[i] := x[i] / a[i,i];
end;
// Вывод решения на экран
for i := 1 to n do
writeln('x[', i, ']=', x[i]);
end;
Здесь n - размерность системы уравнений, и a - массив, содержащий коэффициенты a[i,j] и b[i]. После ввода системы уравнений производится ее приведение к треугольному виду, затем решение системы методом обратного хода.
Пример работы программы:
Введите систему уравнений:
a[1,1]=2
a[1,2]=3
a[1,3]=5
a[1,4]=7
a[2,1]=1
a[2,2]=2
a[2,3]=1
a[2,4]=4
a[3,1]=2
a[3,2]=7
a[3,3]=9
a[3,4]=8
a[4,1]=4
a[4,2]=3
a[4,3]=2
a[4,4]=1
x[1]=-0,643
x[2]=2,875
x[3]=0,210
x[4]=1,714
Заключение
Метод Гаусса является эффективным и широко используемым методом решения систем линейных уравнений. Реализация метода на Паскале не требует больших затрат усилий и может быть легко выполнена студентами в рамках обучения базовым принципам программирования и алгоритмам.