Учебник о том, как решить систему линейных уравнений с помощью исключения Гаусса в Python
Введение
Исключение Гаусса или редукция строк – это численный метод решениясистем линейных уравнений. Эта тема обычно представлена в основах матричной алгебры.
Решение уравнения включает в себя определение значений любых неизвестных переменных, чтобы обе части выражения были равны. Например, см. анимацию ниже, иллюстрирующую решение системы трех линейных уравнений, найденную в этой статье.
Система уравнений
Уравнения 1–3 представляют собой набор примеров линейных уравнений.
- Система: подразумевает, что среди всех уравнений могут существовать общие решения
- Линейная: наивысшая степень неизвестных переменных, x₁, x₂ и x₃, равно 1
Исключение Гаусса – это алгоритм, целью которого является поиск значений x₁, x₂ и x₃, которые одновременно удовлетворить каждое выражение. Компьютеры широко используют его для эффективной оценки потенциально тысяч переменных.
Используйте код Python, представленный в Gist 1, для объявления символической системы уравнений с помощью библиотеки Sympy.
Алгоритм
Метод исключения Гаусса использует матричную алгебру.
Во-первых, запишите уравнения 1–3 в матричной форме Ax = b, как показано в уравнении 4.
- Коэффициенты переменных находятся в матрице A
- Переменные x₁, x₂ и x₃ записываются как вектор-столбец x
- Вектор-столбец b состоит из правой части уравнений
Умножьте строки A на вектор-столбец x, чтобы получить исходные уравнения.
Затем сформируйте расширенную матрицу, просто матрицу A, объединенную с матрицей b в правой части. как показано уравнением 5.
Создайте расширенную матрицу в Python, используя фрагмент кода из Gist 2. Для функции matrix_representation
требуются ранее определенные переменные, equations
и symbolic_vars
.
Преобразуйте расширенную матрицу в эшелонированную форму строк с помощью исключения Гаусса. Эшелонная форма рядов означает:
- Первый ненулевой номер строки находится справа от ведущего коэффициента в строке выше. Это значение называется основной.
- Нули существуют ниже диагонали. Такая матрица является верхнетреугольной, поскольку единственные ненулевые элементы находятся на диагонали или выше нее.
- Любые строки, состоящие только из нулей, находятся в низу матрицы.
Уравнение 6 иллюстрирует эти моменты.
Для приведения расширенной матрицы к форме, аналогичной уравнению 6, используются определенные операции со строками, в том числе:
- Умножить любую строку на константу
- Добавить несколько строк из одной строки в другую
- Поменять местами порядок любых строк
Продолжая систему, представленную выше в уравнении 5, уравнения 7–10 переводят расширенную матрицу в верхнетреугольную форму.
Преобразуйте операции со строками 1–3 в код так, чтобы они преобразовывали любую заданную расширенную матрицу M
в верхнетреугольную форму.
В Gist 3 показан алгоритм Python для выполнения исключения Гаусса и преобразования системы символьных уравнений Sympy в эшелонированную форму строк.
Печать M
в консоль дает следующий выход, эквивалентный матрице, полученной после рукописных операций со строками:
upper triangular matrix: [[ 1. -2. -1. 6. ] [ 0. 1. 0.166667 -1.83334 ] [ 0. 0. 1. 1. ]]
Верхнетреугольная матрица предоставляет три упрощенных выражения, содержащие x₁, x₂ и x₃, как показано в уравнениях 11–13.
Обратная замена позволяет найти неизвестные переменные.
- x₃= 1,0: очевидно из уравнения 13.
- x₂ = -2,0: замените x₃ на 1 в уравнении 12.
- x₁ = 3,0: замените x₃ на 1 и x₂ на 2. в уравнении 11
В Gist 4 представлен код для выполнения обратной замены и решения для неизвестных переменных.
Алгоритм исключения Гаусса успешно зафиксировал решения системы линейных уравнений посредством сокращения строк и обратной замены. Корни идентичны значениям, полученным вручную.
solutions: [3.0000, -2.0000, 1.0000] # (x1, x2, x3)
Пограничные случаи
а) Нет решения: если эшелонированная форма строки содержит строку всех нулей, кроме правой части, решения нет, и система непоследовательно.
Утверждение, выделенное ниже, явно противоречие, так как 0 ≠ 1.
Inconsistent System: [[ 1. 1. -3. 4.] [-0. 1. -5. 6.] [ 0. 0. 0. 1.]]
б) Бесконечное число решений: если существует строка со всеми нулями, и количество ненулевых строк меньше количества переменных, то система зависимый, то есть существует бесконечное множество решений.
Dependent System: [[ 1. 1. -3. 0.] [-0. 1. -5. -0.] [ 0. 0. 0. 0.]]
Визуализируйте решение
Линейное уравнение трех неизвестных описывает плоскость в трех измерениях. Каждая переменная занимает одну ось в ортогональной декартовой системе координат.
Рисунок 1 представляет собой график плоскостей, созданных уравнениями 1–4.
- Синяя плоскость образована уравнением 1:
x1 – 2 * x2 — x3 — 6 = 0
- Зеленая плоскость формируется по уравнению 2:
2 * x1 + 2 * x2 — x3 — 1 = 0
- Красная плоскость образована уравнением 3:
— x1 — x2 + 2 * x3 — 1 = 0
Точка пересечения, которая является решением системы трех линейных уравнений, – это черная точка в точке [3.0, -2.0, 1.0]
с видимыми препятствиями.
Эта взаимная координата является единственным решением системы, что совпадает с ранее полученными алгебраическими результатами.
Графическое изображение зависимой системы показывает, что пересечение между плоскостями образует линию, что оставляет бесконечное количество решений. Кроме того, графически несовместимая система представлена тремя непересекающимися плоскостями.
Подобная визуализация плоскостей не совсем понятна в Matplotlib. Вместо этого используйте этот превосходный графический инструмент для изучения этих сценариев. На рис. 2 показаны те же уравнения, что и на рис. 1, но с улучшенной компьютерной графикой.
Заключение
В этой статье основное внимание уделялось тому, как решить систему из трех линейных уравнений с помощью метода исключения Гаусса. Однако представленный алгоритм Python с исключением Гаусса распространяется на любое количество неизвестных переменных.
Полный код решателя линейных уравнений приведен ниже в Gist 5.
Если вы интересуетесь Python, инженерией и наукой о данных, не стесняйтесь подписаться и ознакомиться с другими моими статьями.
Рекомендации
[1] Строковая эшелонированная форма — Неизвиняющийся математик (Математика для заинтересованных посторонних)
[2] Строковая редукция, рядно-эшелонная форма и редуцированная рядно-эшелонная форма — Лоренцо Садун (30 июля 2013 г.)< br /> [3] Системы уравнений с тремя переменными — lumenlearning