Линейная алгебра
Повороты и комплексные числа
Приложение на полдня, которое позже окупится в RoPE и позиционных кодировках
Почему это здесь, а не в начале
Тригонометрию в этом плане специально отложили до конца блока. Причина в том, что угол — понятие производное: он определяется через скалярное произведение, как мы видели двумя уроками ранее. Начав с тригонометрии, приходится принимать угол на веру; начав с неё в конце, всё встаёт на свои места.
Из всей тригонометрии нужен минимум: радианы, синус и косинус на единичной окружности, формулы сложения углов. Решение треугольников, теоремы синусов и косинусов, обратные функции и подстановки — не нужны.
Радианы и единичная окружность
Радиан — угол, при котором длина дуги равна радиусу. Полный оборот равен . Смысл соглашения в том, что только в радианах верно без лишних множителей, — а это понадобится в блоке 2.
Определение через окружность: точка на единичной окружности под углом имеет координаты . Всё остальное — следствия: это теорема Пифагора, а периодичность — то, что оборот возвращает в ту же точку.
Матрица поворота
Поворот на переводит и . По правилу «столбцы — это образы базисных векторов» матрица получается сразу:
Столбцы ортогональны и единичны, значит ортогональна: , и обратный поворот — это поворот на . Определитель равен : площади сохраняются, ориентация тоже.
Композиция складывает углы
Повернуть на , потом на — то же, что повернуть на :
Раскройте произведение матриц слева и сравните с правой частью поэлементно — получатся ровно формулы сложения углов:
Их не нужно запоминать отдельно: это одно матричное равенство, записанное по элементам. Подвигайте оба угла и убедитесь, что пунктирный вектор всегда попадает туда же, куда привела бы сумма:
матрица поворота
- cos θ
- 0.87
- sin θ
- 0.5
- θ в радианах
- 0.52
- θ + φ
- 75°
Комплексные числа как та же самая структура
Комплексное число — это пара с особым правилом умножения. Правило устроено так, что умножение на — это линейное отображение с матрицей
Сравните с матрицей поворота: при , это ровно она. Умножение на комплексное число единичного модуля — поворот, и ничего больше.
В общем случае записывается через модуль и аргумент :
Умножение перемножает модули и складывает аргументы — потому что растяжения перемножаются, а повороты складываются.
Формула Эйлера
Причина, по которой это не произвольное обозначение: у экспоненты определяющее свойство , а у поворотов — «композиция складывает углы». Это одно и то же свойство. Записав поворот как экспоненту, мы получаем закон сложения бесплатно.
Отсюда же для любого действительного и знаменитое — поворот на половину оборота.
Где это понадобится
- RoPE: позиционное кодирование, которое поворачивает пары координат на угол, пропорциональный позиции. Это буквально из этого урока, применённая блоками по два. Свойство «композиция складывает углы» — причина, по которой относительная позиция получается сама собой: скалярное произведение повёрнутых векторов зависит только от разности углов.
- синусоидальные позиционные кодировки: набор и разных частот.
- преобразование Фурье: разложение по .
- устойчивость рекуррентных сетей: комплексные собственные значения с модулем около единицы — это медленно затухающие колебания, а не взрыв.
Источники
- 3Blue1Brown — Essence of Calculus и Lockdown math, эпизоды про e^{iθ} — Экспонента мнимого аргумента, вращение как умножение
- Needham — Visual Complex Analysis, гл. 1 — Комплексное умножение как поворот с растяжением
Проверки
0 из 2Свойства поворотов
Отметьте все верные утверждения про матрицу поворота и про комплексные числа.
Поворот вектора
Реализуйте
rotate(v, degrees)— поворот двумерного вектора на заданный угол в градусах, против часовой стрелки.Не забудьте перевести градусы в радианы: и
math.sin, иMath.sinпринимают радианы. Это самая частая ошибка в задачах такого рода, и она тихая — код работает, ответ неверен.Верните список из двух чисел. Точных нулей ждать не стоит: в плавающей арифметике даёт , поэтому сравнение здесь с допуском.
Загрузка редактора…
Ctrl/⌘ + Enter