Системы линейных уравнений
Система линейных уравнений — это вопрос «какой вектор 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 вместо точного решения минимизируют ошибку.