Транспонирование и обратная матрица

Как перевернуть матрицу относительно диагонали и обратить её — и где тут подводный камень с комплексными числами.

Транспонирование меняет строки и столбцы местами; обратная матрица inv(A) при умножении на A даёт единичную.

Апостроф транспонирует

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

A = [1 2 3; 4 5 6];
At = A'          % 3x2: строки и столбцы поменялись
v = [1 2 3];
vc = v'          % вектор-столбец

Вывод (At):

At =
     1     4
     2     5
     3     6

Обратная матрица

Функция inv(A) возвращает обратную матрицу: A * inv(A) равно единичной (с точностью до округления). Обратная существует только для квадратных невырожденных матриц. Если определитель близок к нулю, матрица почти вырождена, и обратная вычисляется с большой погрешностью — MATLAB предупредит о плохой обусловленности.

A = [4 7; 2 6];
B = inv(A);
A * B            % должно быть близко к единичной

Вывод:

ans =
     1     0
     0     1

Почему inv стоит избегать

Это важный профессиональный совет. Чтобы решить систему A·x = b, начинающие пишут x = inv(A) * b. Так делать не надо: явное обращение и медленнее, и численно менее точно, чем оператор обратного деления x = A \ b (о нём — следующий урок). Явная обратная матрица нужна редко — в основном в теоретических выкладках, а не для решения систем.

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

Транспонирование физически не всегда копирует данные: MATLAB может просто «переключить» интерпретацию строк и столбцов, пока это возможно. А вот inv внутри выполняет полное LU-разложение и решает n систем уравнений — это O(n^3) операций. Решение одной системы через \ стоит столько же по порядку, но избегает лишнего шага и накопления ошибки. Отсюда правило: обращайте матрицу, только если вам действительно нужна сама обратная.

Симметрия, ортогональность и зачем это знать

Транспонирование — не просто техническая операция, оно связано с важными свойствами матриц. Матрица симметрична, если A == A'; такие матрицы возникают в ковариациях, матрицах жёсткости, графах, и для них есть особенно быстрые и устойчивые алгоритмы (например, разложение Холецкого). Матрица ортогональна, если A' * A равно единичной, — её столбцы образуют перпендикулярный базис, а обращение такой матрицы тривиально: оно совпадает с транспонированием. Эти свойства не абстракция: распознав симметрию или ортогональность, MATLAB (и вы) можете выбрать более быстрый и точный путь вычисления. Поэтому транспонирование стоит воспринимать не как «перевернуть числа», а как операцию, через которую выражаются ключевые структурные свойства матриц.

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

  • Применять inv к неквадратной или вырожденной матрице — ошибка или мусорный результат.
  • Решать систему через inv(A)*b вместо A\b — теряется точность и скорость.
  • Забывать про разницу ' и .' для комплексных матриц.

Псевдообратная для прямоугольных матриц

Обычная обратная inv определена только для квадратных невырожденных матриц. Но в задачах подгонки данных постоянно встречаются прямоугольные матрицы, у которых обратной в строгом смысле нет. Для них существует псевдообратная Мура — Пенроуза, которую считает функция pinv. Она обобщает идею обращения на любые матрицы и тесно связана с решением переопределённых систем по методу наименьших квадратов. Знать о её существовании полезно, хотя на практике для решения систем почти всегда предпочитают оператор \, который выбирает подходящий метод автоматически.

Число обусловленности — мера надёжности

С обращением матриц связан тонкий, но важный сюжет: не всякую обратимую матрицу можно обратить точно. Если матрица почти вырождена (её строки почти линейно зависимы), малое изменение входных данных вызывает огромное изменение результата — задача плохо обусловлена. Численную «надёжность» матрицы измеряет число обусловленности cond(A): чем оно больше, тем сильнее результат чувствителен к округлениям. Когда cond(A) достигает миллионов, доверять обратной матрице нельзя — ответ может быть искажён ошибками округления double. MATLAB предупреждает о таких случаях фразой про «ill-conditioned matrix». Понимание обусловленности отличает того, кто слепо доверяет числам, от того, кто умеет оценить их достоверность.

Итоги

  • ' транспонирует (для комплексных — с сопряжением), .' — без сопряжения.
  • inv(A) даёт обратную для квадратных невырожденных матриц.
  • Для решения систем используйте A\b, а не inv(A)*b.
Проверьте себя
1. Что делает оператор ' (апостроф) с матрицей?
AВозводит в степень
BТранспонирует (для комплексных — с сопряжением)
CОбращает
DВычисляет определитель
2. Почему систему A·x=b лучше решать через A\b, а не inv(A)*b?
AA\b короче печатать
BA\b точнее и быстрее, избегает явного обращения
Cinv не существует
DЭто одно и то же
3. Для каких матриц существует inv(A)?
AДля любых
BТолько для квадратных невырожденных
CТолько для симметричных
DТолько 2×2