Учебник о том, как решить систему линейных уравнений с помощью исключения Гаусса в 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, используются определенные операции со строками, в том числе:

  1. Умножить любую строку на константу
  2. Добавить несколько строк из одной строки в другую
  3. Поменять местами порядок любых строк

Продолжая систему, представленную выше в уравнении 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