Решение СЛАУ оператором A\b

Один символ, ради которого MATLAB во многом и создавался, — обратная косая черта.

Оператор обратного деления A\b решает систему линейных уравнений A·x = b относительно x.

Система за один символ

Представьте систему уравнений. В обычном языке вы бы расписывали метод Гаусса вручную. В MATLAB вы записываете коэффициенты в матрицу A, правые части — в вектор b, и пишете x = A\b. Всё. Это и есть та краткость, ради которой инженеры выбирают MATLAB.

Решим систему: 2x + y = 5, x + 3y = 10.

A = [2 1; 1 3];
b = [5; 10];
x = A \ b        % решение системы

Вывод:

x =
    1.0000
    3.0000

То есть x = 1, y = 3. Подставьте обратно — уравнения выполняются.

Не только квадратные системы

Сила оператора в том, что он автоматически выбирает подходящий алгоритм. Для квадратной системы он применяет LU-разложение. Если уравнений больше, чем неизвестных (переопределённая система), \ находит решение по методу наименьших квадратов — то самое, что лежит в основе линейной регрессии. Один оператор покрывает и точное решение, и аппроксимацию.

% Переопределённая система (3 уравнения, 2 неизвестных)
A = [1 1; 1 2; 1 3];
b = [2; 2.9; 4.2];
x = A \ b        % наименьшие квадраты

Как работает под капотом

Оператор \ — это не одна функция, а целый диспетчер. MATLAB анализирует матрицу A: треугольная? симметричная положительно определённая? разреженная? переопределённая? — и под каждый случай выбирает оптимальный метод из LAPACK: прямую подстановку, разложение Холецкого, LU или QR. Поэтому A\b почти всегда быстрее и устойчивее любого ручного метода, который вы написали бы сами. Это инкапсулированная экспертиза десятилетий вычислительной линейной алгебры в одном символе.

Параллель с NumPy

В NumPy прямого аналога-оператора нет: для квадратных систем используют numpy.linalg.solve(A, b), а для наименьших квадратов — numpy.linalg.lstsq. MATLAB-овский \ объединяет оба случая, сам выбирая стратегию. Именно эта лаконичность делает матричный код в MATLAB особенно компактным.

Геометрический смысл решения

Полезно видеть за оператором \ не только алгоритм, но и геометрию. Система A·x = b для двух неизвестных — это пересечение двух прямых; решение x — точка их пересечения. Если прямые параллельны (строки A пропорциональны), пересечения нет или их бесконечно много — система вырождена, и это видно геометрически как совпавшие или непересекающиеся линии. Для переопределённой системы прямых больше, чем нужно для одной точки, и они, как правило, не сходятся в общей точке из-за шума; тогда метод наименьших квадратов находит точку, минимально удалённую от всех, — наилучший компромисс. Эта геометрическая картина помогает понять, почему один и тот же оператор \ в одних случаях даёт точное решение, а в других — наилучшее приближение: он всегда ищет «самую согласованную» точку, какой бы ни была конфигурация уравнений.

Частые ошибки

  • Путать \ (обратное, левое деление, решает A·x=b) и / (правое деление, решает x·A=b).
  • Несовместимые размеры: b должен быть столбцом высотой как число строк A.
  • Решать вырожденную систему и не замечать предупреждение о бесконечном множестве решений.

Левое и правое деление

У оператора деления две формы, и их легко перепутать. Обратная косая A\b (левое деление) решает систему A·x = b, где неизвестное умножается на матрицу слева. Прямая косая x = b/A (правое деление) решает x·A = b, где неизвестное стоит слева от матрицы. На практике подавляющее большинство систем записывают в форме A·x = b, поэтому именно \ — рабочая лошадка. Запомнить помогает мнемоника: косая «наклонена» к той стороне, с которой стоит матрица, делящая правую часть.

Когда система не имеет единственного решения

Реальные системы не всегда послушны. Если уравнений меньше, чем неизвестных (недоопределённая система), решений бесконечно много, и \ вернёт одно из них — обычно с наименьшей нормой, предупредив о ранге. Если матрица вырождена, оператор тоже предупредит, что решение не единственно. А для переопределённой системы, как мы видели, он даёт наилучшее приближение по методу наименьших квадратов. Важный вывод: \ почти никогда не «падает» — он всегда что-то возвращает, поэтому ответственность за интерпретацию лежит на вас. Всегда стоит проверить ранг матрицы и осмыслить, какого рода система перед вами, прежде чем доверять результату.

Итоги

  • x = A\b решает A·x = b одним оператором.
  • Для переопределённых систем даёт решение по методу наименьших квадратов.
  • Внутри — диспетчер, подбирающий оптимальный численный метод под структуру A.
Проверьте себя
1. Что вычисляет выражение A\b?
AПоэлементное деление
BРешение системы A·x = b
CОбратную матрицу
DОпределитель
2. Что делает A\b, если уравнений больше, чем неизвестных?
AВыдаёт ошибку
BНаходит решение по методу наименьших квадратов
CБерёт первые n уравнений
DВозвращает ноль
3. Почему A\b устойчивее ручного метода?
AОн всегда использует один алгоритм
BОн подбирает оптимальный численный метод под структуру A
CОн округляет результат
DОн медленнее, но проще