Pascal. Решение системы уравнений методами Гаусса и Итераций

Добрый день дорогие читатели. В статье описывается решение системы уравнений методами Гаусса и Итераций написанние на языке программирования Turbo Pascal 7.0 (Borland Pascal 7.0).

Привожу результирующий исходный код программы:

Program B_11; {реш. сист. ур-ий методами ГАУССА и ИТЕРАЦИЙ}

const
    n = 2; {количество уpавнений}
    e = 1e-5; {точность}

var
    a, a1: array [1..n, 1..n + 1] of real;
    xg, xi, xt: array[1..n] of real;
    i, j, k: integer;
    y: real; {y-значение ведущего элемента}
    sg, si, w: real;
    Error, EndSearch: boolean;

BEGIN
    Randomize;
    for i := 1 to n do
        for j := 1 to n + 1 do
        begin
            a[i, j] := 10 * random; {случайным образом задаем коэфф.}
            a1[i, j] := a[i, j];
        end;

    {--------------- Метод ГАУССА -----------------}
    for i := 1 to n do {изучение макс. кооф. при x[i]}
    begin
        k := i;
        y := a[i, i]; {вед. элементу := a[i, i]- кооф. главной диаг.}
        for j := i + 1 to n do
        begin
            w:=a[j,i];
            if abs(w) < abs(y)
                then {кооф. на главной диаг. должен}
                begin {быть больше последующего элемента}
                    k := j; {иначе происходит смена ведущего элемента}
                    y := w
                end;
        end;
        if abs(y) < e
            then {ведущий элемент меньше точности}
            begin {матрица вырождена и не имеет решений}
                Writeln('Методом ГАУССА решить невозможно.');
                exit;
            end;
        for j := i to n + 1 do {цикл перестановки кооф. и уравн.}
        begin {деление последнего на Y }
            w := a[k, j];
            a[k, j] := a[i, j];
            a[i, j] := w / y;
        end;
        for k := i + 1 to n do {определение наддиаг. элементов}
            for j := n + 1 downto i + 1 do
                a[k, j] := a[k, j] - a[i, j] * a[k, i];
    end;
    for i := n downto 1 do
    begin
        w := 0;
        for j := i + 1 to n do
            w := w + a[i, j] * xg[j];
        xg[i] := a[i, n + 1] - w;
    end;

    {--------------- Метод ИТЕРАЦИЙ -----------------}
    for i := 1 to n do
    for j := 1 to n + 1 do
        a[i, j] := a1[i, j]; {восстановка коэф.}
    for i := 1 to n do
    begin
        for j := i + 1 to n do
            if a[i, j] >= a[i, i] then error := true;
        for j := i - 1 downto 1 do
            if a[i, j] >= a[i, i] then error := true;
    end; {на главной диагонали должны быть}
    if error
    then {максимальные коэффициенты}
        begin
            Writeln('Методом ИТЕРАЦИЙ решить невозможно.');
            exit;
        end;
    repeat
        for j := 1 to n do xi[j] := xt[j];
        for j := 1 to n do xt[j] := a[j, n + 1];
        for j := 1 to n do
        begin
            for i := 1 to n do
                if j <> i then xt[j] := xt[j] - a[j, i] * xi[i];
            xt[j] := xt[j] / a[j, j];
        end;
        EndSearch := True;
        for j := 1 to n do
            if abs(xt[j] - xi[j]) > e then EndSearch := False;
    until EndSearch;
    Writeln('Корни:_ГАУССА_ИТЕРАЦИЙ_Проверка:_ГАУССА_ИТЕРАЦИЙ_');
    For i := 1 to n do
    begin
        Write('X(', i:2, ')=', xg[i]:7:2, ' ', xi[i]:7:2, '|       ');
        sg := 0;
        si := 0;
        For j := 1 to n do
        begin
            sg := sg + a1[i, j] * xg[j];
            si := si + a1[i, j] * xi[j];
        end;
        Writeln(sg:5:3, '=', a1[i, n + 1]:5:3, '  ', si:5:3, '=', a1[i,n + 1]:5:3);
    end;
END.

Вот и всё, данная программа составлялась мною ещё в конце 90-ых годов при учёбе в Приазовском Государственном Техническом Университете.

Автор: Попов Вадим

Launch the License Manager from the bin folder (by default “C:/Program Files (x86)/Embarcadero/Studio/23.0/bin/LicenseManager.exe“) and delete any trial or beta (Test Field) license that you...

Карта разрушений и жертв российской агрессии в городе Мариуполь, на карте отмечены более 2000 пострадавших домов. На карте отмечены не только фото домов, но свидетельства их жителей, а так же место боевых...

Из-за военных событий 2014 года в Донецке тренер по плаванию Алексей Снежко и его жена вынужденно переехали в Киев. А теперь, в 2022-м, 33-летний Алексей потерял обоих родителей в Мариуполе. Как пережить...

Компьютерный мирSector

Вся информация на страницах сайта предназначена только для личного не коммерческого использования, учёбы, повышения квалификации и не включает призывы к каким либо действиям.

Частичное или полное использование материалов сайта разрешается только при условии добавления ссылки на непосредственный адрес материала на нашем сайте.