Решение СЛАУ оператором 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.