Системы линейных уравнений

Система линейных уравнений — это вопрос «какой вектор x матрица A превращает в заданный b».

Система линейных уравнений — набор уравнений вида a1·x + a2·y + ... = b. Компактно записывается как A·x = b, где A — матрица коэффициентов, b — вектор правых частей.

Три взгляда на систему

Возьмём систему из двух уравнений: 2x + y = 5 и x + 3y = 10.

  • Геометрия (строки): каждое уравнение — прямая на плоскости. Решение — точка их пересечения.
  • Алгебра (матрица): это уравнение A·x = b, где A = [[2, 1], [1, 3]], b = [5, 10]. Ищем вектор x, который матрица A переводит в b.
  • Через обратную: если A обратима, ответ x = A⁻¹·b.

Решение методом исключения

Классический способ — последовательно исключать переменные. Это то, что вы делали в школе («выразить, подставить»), записанное аккуратно. Для 2×2 есть готовая формула через определитель, выведем решение ею.

# Решаем A x = b для системы 2x2 методом Крамера (через определители)
# 2x + 1y = 5
# 1x + 3y = 10
def solve_2x2(A, b):
    (a, bb), (c, d) = A[0], A[1]
    det = a * d - bb * c
    if det == 0:
        return None     # нет единственного решения
    x = (b[0] * d - bb * b[1]) / det
    y = (a * b[1] - b[0] * c) / det
    return [x, y]

A = [[2, 1],
     [1, 3]]
b = [5, 10]
sol = solve_2x2(A, b)
print("Решение: x =", sol[0], ", y =", sol[1])

# Проверка: подставим обратно
print("Проверка ур.1:", 2 * sol[0] + 1 * sol[1])   # должно быть 5
print("Проверка ур.2:", 1 * sol[0] + 3 * sol[1])   # должно быть 10

Вывод:

Решение: x = 1.0 , y = 3.0
Проверка ур.1: 5.0
Проверка ур.2: 10.0

Когда решения нет или их бесконечно много

Геометрия объясняет все случаи. Две прямые могут пересечься (одно решение), быть параллельными (решений нет) или совпасть (бесконечно много решений). Алгебраически последние два случая — это det = 0: матрица вырождена, обратной нет. В ML мы редко решаем систему «в лоб» — данных обычно больше, чем переменных, и точного решения не существует. Тогда вместо равенства A·x = b минимизируют ошибку |A·x − b| — и так приходят к методу наименьших квадратов и линейной регрессии (следующие разделы).

# Параллельные прямые: x + y = 1 и 2x + 2y = 5 — решений нет
def solve_2x2(A, b):
    (a, bb), (c, d) = A[0], A[1]
    det = a * d - bb * c
    if det == 0:
        return "det = 0: единственного решения нет"
    x = (b[0] * d - bb * b[1]) / det
    y = (a * b[1] - b[0] * c) / det
    return [x, y]

print(solve_2x2([[1, 1], [2, 2]], [1, 5]))

Вывод:

det = 0: единственного решения нет

Итог

  • Система линейных уравнений = матричное уравнение A·x = b.
  • Геометрически решение — точка пересечения прямых (плоскостей).
  • Если A обратима (det ≠ 0) — ровно одно решение x = A⁻¹·b.
  • При det = 0 решений нет или их бесконечно много; в ML вместо точного решения минимизируют ошибку.
Проверьте себя
1. Как компактно записывается система линейных уравнений?
AA + x = b
BA·x = b
Cx = A + b
DA·b = x
2. Что геометрически означает решение системы из двух уравнений с двумя неизвестными?
AПлощадь между прямыми
BТочку пересечения двух прямых
CДлину каждой прямой
DУгол между прямыми
3. Что значит det(A) = 0 для системы A·x = b?
AВсегда ровно одно решение
BЕдинственного решения нет: либо решений нет, либо их бесконечно много
CСистема решена неверно
Dx обязательно равен нулю
Поддержать проект