Про логарифм от матрицы

Другая тупая штука, о которой я недавно подумал следующая. Опять про композицию операторов.

Что такое вектора на плоскости? Их можно представить как преобразования параллельного переноса всей плоскости вдоль направления вектора. Композиция таких преобразований будет соответствовать сумме векторов. То есть:

композиция операторов переноса <=> сумма соответствующих векторов

Мы так же знаем, что есть более общие преобразования в виде матриц. Но композиция преобразований соответствующих матрицам соответствует матрице-произведению:

композиция линейных операторов <=> произведение соответствующих матриц

Произведение, а не сумма.

Далее, почему мы остановились на произведении матриц, если это какая-то сложная для вычисления операция по сравнению с сложением векторов. Хотелось бы перейти от произведения матриц к их сложению. Как это сделать? Правильно: с помощью логарифма!

композиция линейных операторов <=> сумма логарифмов соответствующих матриц

Кроме удобства вычислений композиции с помощью суммы, которая хорошо параллелится, мы так же получим просто интерпретируемые матрицы преобразований. На двух примерах, на которых это работает:

  1. Единичная матрица [­[1, 0], [0, 1]] ничего не делает с плоскостью, но понять это можно, только посмотрев, как она работает в произведении на вектор. Логарифм же единичной матрицы это просто нулевая матрица! А она, очевидно, ничего и не делает.
  2. Матрица поворота [­[cos, -sin], [sin, cos]] выражает, как ни странно, поворот. Но для нее все ячейки задаются в каком-то порядке синусами-косинусами с какими-то знаками и зависят только от угла поворота. Логарифм этой матрицы (по аналогии с комплексными числами, а матрица выше соответствует числу exp(phi * i)) дает угол, а точнее матрицу с углом поворота: [­[0, -phi], [phi, 0]]. Очевидно, что сложение углов двух матриц даст угол суммарного поворота. Так же, такую матрицу проще написать и интерпретировать: сразу виден угол поворота.

Более подробно про логарифм матриц:

https://en.wikipedia.org/wiki/Logarithm_of_a_matrix