Реализовать код Паскаль метода Гаусса решения систем линейных алгебраических уравнений
program Gauss;
const
MaxN = 100;
var
A: array [1..MaxN, 1..MaxN + 1] of Real;
N: Integer;
{ Функция для деления строки на число }
procedure DivideStrings(var A: array of Real; Row: Integer; Value: Real);
var
i: Integer;
begin
for i := Low(A) to High(A) do
A[i] := A[i] / Value;
end;
{ Функция для вычитания одной строки из другой }
procedure SubtractStrings(var A: array of Real; RowDst, RowSrc: Integer; Value: Real);
var
i: Integer;
begin
for i := Low(A) to High(A) do
A[RowDst][i] := A[RowDst][i] - A[RowSrc][i] * Value;
end;
{ Процедура для приведения матрицы к треугольному виду }
procedure ToTriangle(var A: array of Real; N: Integer);
var
i, j, k: Integer;
divisor: Real;
begin
for i := 1 to N do
begin
{ Поиск максимального элемента в столбце }
k := i;
for j := i + 1 to N do
if Abs(A[j][i]) > Abs(A[k][i]) then
k := j;
{ Обмен строки i с k, если необходимо }
if i <> k then
begin
for j := i to N + 1 do
begin
A[i][j] := A[i][j] + A[k][j];
A[k][j] := A[i][j] - A[k][j];
A[i][j] := A[i][j] - A[k][j];
end;
end;
{ Деление строки i на первый ненулевой элемент }
if A[i][i] <> 0 then
begin
divisor := A[i][i];
DivideStrings(A[i], i, divisor);
{ Вычитание i строки из всех последующих строк }
for j := i + 1 to N do
begin
divisor := A[j][i];
SubtractStrings(A, j, i, divisor);
end;
end;
end;
end;
{ Процедура для решения системы уравнений }
procedure Solve(var A: array of Real; N: Integer);
var
i, j: Integer;
x: array [1..MaxN] of Real;
begin
{ Обратная подстановка }
for i := N downto 1 do
begin
x[i] := A[i][N + 1];
for j := N downto i + 1 do
x[i] := x[i] - A[i][j] * x[j];
end;
{ Вывод решений на экран }
Write('x = (');
for i := 1 to N do
Write(x[i]:0:4, ', ');
WriteLn(')');
end;
{ Основная программа }
begin
{ Ввод данных }
Write('Введите размер матрицы: ');
ReadLn(N);
WriteLn('Введите матрицу:');
for i := 1 to N do
for j := 1 to N + 1 do
Read(A[i][j]);
{ Приведение матрицы к треугольному виду и решение системы уравнений }
ToTriangle(A, N);
Solve(A, N);
end.
Таким образом, реализация кода метода Гаусса на языке Паскаль позволяет решать системы линейных уравнений любого размера с высокой точностью и быстродействием.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет