Метод Гаусса для решения систем линейных уравнений: правила и примеры
Обнуляем матрицу, чтобы победить систему.
Решение систем линейных алгебраических уравнений — одна из ключевых задач линейной алгебры. С такими системами сталкиваются при моделировании физических процессов, анализе данных и решении прикладных инженерных задач.
На практике для решения систем линейных алгебраических уравнений (СЛАУ) часто используют метод Гаусса. Он основан на представлении системы уравнений в виде матрицы и последовательном преобразовании этой матрицы, которое позволяет найти значения неизвестных.
В статье разберём, как работает метод Гаусса, рассмотрим примеры решения систем уравнений и напишем простую функцию на Python для автоматизации вычислений.
Содержание
Что такое метод Гаусса
Система линейных алгебраических уравнений (СЛАУ) — это набор уравнений, для которых нужно найти значения переменных, удовлетворяющие всем уравнениям одновременно. То есть искомые значения должны быть верны не для одного уравнения по отдельности, а для всей системы целиком.
Рассмотрим пример СЛАУ. Обратите внимание, что во всех уравнениях используются одни и те же переменные — x, y и z.
Метод Гаусса — это способ решения систем линейных алгебраических уравнений. Его идея в том, что исходную систему уравнений записывают в виде матрицы — числовой таблицы со строками и столбцами. Такой подход позволяет работать только с коэффициентами и свободными членами, не оперируя буквенными обозначениями.
Далее матрицу пошагово преобразуют с помощью элементарных операций над строками: сложения, вычитания, умножения на число, деления и перестановки строк. Эти операции не меняют множество решений системы. Преобразования продолжают до тех пор, пока система не примет вид, из которого значения переменных можно определить напрямую.
Пример системы линейных уравнений
Представим маркетолога Анну, которая планирует рекламную кампанию для нового продукта. У неё есть бюджет в 300 долларов для распределения между продвижением в социальных сетях и контекстной рекламой.
Анна знает, что затраты на социальные сети должны быть в два раза больше, чем на контекстную рекламу. Это условие необходимо, чтобы кампания была сбалансированной и дала ожидаемый результат. Возникает вопрос: как распределить бюджет? Здесь поможет СЛАУ.
Обозначим бюджет на рекламу в социальных сетях через x, а бюджет на контекстную рекламу — через y. Тогда из условия задачи получаем систему уравнений.
В математике систему уравнений принято обозначать фигурной скобкой. Чтобы её решить, нужно найти такие x и y, которые будут верны для обоих уравнений.
Как записать систему уравнений в матричной форме
Чтобы упростить работу с системой, её записывают в виде матрицы — таблицы с числами. Возьмём систему уравнений из предыдущего раздела.
Запишем коэффициенты в виде матрицы.
Что мы сделали? Первые два столбца — коэффициенты при x и y. Там, где в уравнении x и y стоят без коэффициентов, подразумевается 1. Вместо −2y мы пишем −2 — знаки коэффициентов в матрице сохраняются. Справа от вертикальной черты указываем свободные члены, то есть значения из системы уравнений после =.
Решение линейных уравнений методом Гаусса
Основа метода — поэтапное упрощение системы уравнений. Сначала её записывают в матричном виде, а затем с помощью элементарных преобразований строк — их перестановки, умножения на число или прибавления одной к другой — приводят матрицу к ступенчатой форме.
В ступенчатой матрице каждая следующая строка начинается правее предыдущей, а уравнение с одной переменной находится внизу. Это делает систему удобной для вычислений.
Дальше выполняют обратный ход: начиная с последнего уравнения, последовательно находят значения переменных и подставляют их в предыдущие. В итоге получают решение системы или выясняют, что решений нет либо их бесконечно много.
Описание метода может выглядеть запутанно, поэтому разберём на примерах.
Решение системы с двумя уравнениями и двумя переменными
Начнём с простой системы, чтобы понять общий принцип метода Гаусса. Рассмотрим систему из двух линейных уравнений с двумя переменными.
Сначала представим систему в матричном виде, убрав сами переменные и оставив только коэффициенты при них и свободные члены. Так мы получим расширенную матрицу системы.
Далее упростим строки матрицы. Для этого подберём общий множитель (или знаменатель) для каждой строки и разделим все элементы строки на него. Цель этого шага — получить в первом столбце единицу, чтобы упростить дальнейшие преобразования.
Для первой строки знаменателем будет 2, а для второй — 3. Поделим и получим новую матрицу.
Теперь с помощью простых операций — вычитания, умножения, перестановки строк — приведём матрицу к более простому виду. Наша цель — получить такую форму, в которой одно из уравнений будет содержать только одну переменную. Например, матрица может выглядеть так.
Если перевести её обратно в систему уравнений, то она будет иметь следующий вид.
То есть значение переменной n будет равно x. А когда одно из значений известно, найти вторую можно методом подстановки.
Теперь разберёмся, как получить такую матрицу в нашем примере. Для этого из второй строки матрицы вычтем первую строку (при этом первая строка остаётся без изменений). В результате в первом столбце второй строки появится ноль.
Теперь запишем эту матрицу в виде системы уравнений.
Подставим y в верхнее уравнение:
x + 2 = 4
Вычислить x несложно:
x = 2
И выходит, что решение для нашей системы уравнений: x = 2, y = 1.
Решаем систему из трёх уравнений с тремя переменными
Усложним задачу. Представим систему с тремя уравнениями.
Запишем её в виде матрицы.
Задача та же, что и раньше: привести эту матрицу к ступенчатой — такой, где каждое следующее уравнение будет сдвинуто вправо, а в последней строке будет всего два столбца со значениями равными 0.
Обнулим элементы в первом столбце, сохранив 1. Для этого вычтем из второй строки первую, умноженную на 2, и из третьей — первую, умноженную на 3.
Перейдём ко второму столбцу — нам надо обнулить значение в последнем уравнении. Для этого сначала поменяем местами вторую и третью строки. Такая замена не влияет на саму систему, так как расположение строк не определяет переменные.
Теперь избавимся от пятёрки во втором столбце третьей строки — вычтем из третьей строки вторую, умноженную на 5.
Осталось получить единицу в третьей строке. Разделим её на 57.
Теперь выполним обратную подстановку — последовательно определим переменные, начиная с третьей строки. Для z значение найти легко:
Округлим до −1.
Найдём значение y во второй строке:
y − (12) × (−1) = −15 → y + 12 = −15 → y = −3
Из первой найдём значение x:
x − (−3) + (−1) = 8 → x + 3 − 1 = 8 → x = 6
Решение для системы уравнений: x = 6, y = −3, z = −1.
Решаем систему уравнения без решения
Иногда у систем может не быть решения. Представим, что у нас есть два объединённых уравнения.
Переведём систему в матрицу.
Вычтем из второй строки первую, умноженную на 2.
Во второй строке видим 0 = 4. Это невозможно, так как исчезла сама переменная! Значит, система не имеет решения.
В реальной задаче это может означать, что она поставлена неверно: например, кто-то пытается распределить бюджет, которого не хватает.
Как использовать метод Гаусса — Жордана
Классический метод Гаусса приводит матрицу к ступенчатой форме, где каждая следующая строка содержит больше нулей, чем предыдущая, а потом использует обратную подстановку, чтобы найти значения переменных.
Метод Гаусса — Жордана работает иначе. Его основной смысл в том, чтобы преобразовать матрицу системы уравнений в такую форму, где слева от вертикальной черты будет единичная матрица, то есть на диагонали будут расположены единицы, а по краям от неё — нули. Например, вот так.
В таком виде каждая строка сразу указывает значение одной переменной. В отличие от классического метода Гаусса здесь не требуется обратная подстановка.
Посмотрим на систему уравнений.
Преобразуем её в матрицу.
Теперь наша задача превратить матрицу в единичную. Единичная матрица — это ступенчатая матрица с единицами на главной диагонали.
Для этого:
1. Поменяем строки местами, чтобы в левом верхнем углу была 1: так удобнее начинать работу.
2. Обнулим первый элемент во второй строке — вычтем из второй строки первую, умноженную на 2.
3. Получим 1 во втором столбце второй строки, чтобы получилась диагональ из единиц. Для этого разделим вторую строку на 5.
4. Обнулим элемент над единицей во второй строке. Прибавим к первой строке вторую, чтобы убрать −1 в первом столбце.
Готово! Матрица в диагональной форме, и мы сразу видим значения переменных, то есть решение системы уравнений:
Теперь, зная разные подходы, попробуйте решить систему уравнений из начала статьи.
Посмотреть ответ:
x = 200 и у = 100.
Метод Гаусса в программировании
Метод Гаусса можно реализовать в виде функции в Python. Откройте IDE и вставьте код:
def gaussian_elimination(mat):
n = len(mat)
# Прямой ход с пивотированием (обнуление всех элементов строки или столбца, кроме одного)
for i in range(n):
# Находим строку с максимальным элементом в i-м столбце
max_row = i
for k in range(i + 1, n):
if abs(mat[k][i]) > abs(mat[max_row][i]):
max_row = k
# Меняем строки
mat[i], mat[max_row] = mat[max_row], mat[i]
# Проверяем, нет ли деления на ноль
if abs(mat[i][i]) < 1e-10:
return None # Система не имеет единственного решения
# Делаем ведущий элемент равным 1
pivot = mat[i][i]
for j in range(i, n + 1):
mat[i][j] /= pivot
# Обнуляем элементы ниже ведущего
for k in range(n):
if k != i:
factor = mat[k][i]
for j in range(i, n + 1):
mat[k][j] -= factor * mat[i][j]
# Извлекаем решение
x = [mat[i][n] for i in range(n)]
return x
# Пример использования
matrix = [
[2, 3, 6],
[1, -1, 0.5]
]
result = gaussian_elimination(matrix)
print("Решение:", result)
# Вывод: [1.5, 1.0]
Можете протестировать на собственных системах уравнений. Главное — преобразуйте их в матричную форму.
Если же вам не хочется использовать эту функцию или писать свою, то в библиотеках Python есть готовые инструменты:
Часто задаваемые вопросы
Метод Гаусса кажется простым, но может доставить проблем, если работать неаккуратно. Разберём самые частые вопросы, которые возникают при его использовании.
Что делать, если появляется деление на ноль
Иногда при преобразованиях матрицы на главной диагонали появляется ноль, на который невозможно делить другие строки. Решение — поменять их местами.
Перед тем как обнулять столбец, найдите строку, где в этом столбце стоит ненулевое число (лучше — самое большое по модулю), и поменяйте строки местами, чтобы сохранить возможность преобразования значений по диагонали.
Было:
Стало:
Как избежать ошибок округления?
Если работать с матрицами на компьютере, то возможна ошибка при вычислениях с дробями или числами с плавающей точкой, например 0,333333…
В этих случаях компьютер может округлять их, накапливая ошибки. Чтобы избежать таких проблем, меняйте строки местами и выбирайте в качестве делимого наибольшие числа из имеющихся.
Почему метод Гаусса плохо работает с большими матрицами
Если у вас система с сотнями уравнений, что может встречаться, например, при анализе больших данных, метод Гаусса может быть слишком медленным. Его сложность — O (n3), то есть время работы растёт как куб числа уравнений. Для больших матриц лучше использовать итерационные методы, которые работают быстрее: метод Якоби, метод Гаусса — Зейделя и другие.
Можно ли решать нелинейные уравнения методом Гаусса?
Увы, нет. Метод Гаусса работает только с линейными уравнениями, где переменные не возводятся в степень и не перемножаются друг на друга. Для нелинейных систем есть другие методы, например метод Ньютона.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!