Решение системы линейных уравнений методом Гаусса

Данный модуль не претендует на полноту, но может быть использован в учебных целях.

# gauss.m
# Решение системы линейных уравнений методом Гаусса
function X = gauss(A, B)


    r = rows(A);
    c = columns(A);
    Ag = [A B];    # Расширенная матрица

    if (rank(A) == rank(Ag))
        if (rank(A) == c)
            disp("Единственное решение (система совместна и определена)");

            # Прямой ход
            for k = 1:r                 # k - номер шага
                if (Ag(k,k) != 0)
                Ag(k,:) = Ag(k,:)./Ag(k,k);    # Приведение первого коэффициента уравнения к 1
                for i = k + 1:c            # i - счетчик по остальным уравнениям
                    Ag(i,:) = Ag(i,:) - Ag(k,:)*Ag(i,k);
                endfor
                else
                    disp("Деление на ноль.")
                    return
                endif
            endfor
            # Обратный ход
            X = Ag(end,end);    # Последний корень - угловой элемент матрицы Ag
            for k = r - 1:-1:1
                X = [Ag(k, c + 1) - sum(Ag(k, c - (length(X) - 1):c) * X); X];    # Подсчёт остальных корней
            endfor
        else
            disp("Больше одного решения (система совместна, но неопределена)");
        endif
    else
        disp("Нет решений (система несовместна)");
    endif

endfunction

PS Модуль предназначен для octave, но должен работать и в matlab’е.

~ от aleos на 9 Апрель 2008.

2 коммент. to “Решение системы линейных уравнений методом Гаусса”

  1. Добрый день!
    Спасибо за модуль. Есть пару вопросов. Как должна выглядеть А. Это же матрица? какого размера? Что такое В… не плучается у меня. Если определяю матрицы таким способом:

    m = 5;
    l=1;
    A = fix(10*rand(m,m));
    B = fix(10*rand(m,l));

    то функция ругается что А неопределено… И что делать?

  2. Очень странно. Проверил с таким же определением A и B. У меня всё работает.

Ответить