Решение системы линейных уравнений методом Гаусса
Данный модуль не претендует на полноту, но может быть использован в учебных целях.
# 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’е.


Добрый день!
Спасибо за модуль. Есть пару вопросов. Как должна выглядеть А. Это же матрица? какого размера? Что такое В… не плучается у меня. Если определяю матрицы таким способом:
m = 5;
l=1;
A = fix(10*rand(m,m));
B = fix(10*rand(m,l));
то функция ругается что А неопределено… И что делать?
Очень странно. Проверил с таким же определением A и B. У меня всё работает.