Транспонирование и обратная матрица
Как перевернуть матрицу относительно диагонали и обратить её — и где тут подводный камень с комплексными числами.
Транспонирование меняет строки и столбцы местами; обратная матрица
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.