Сегодня числа раскроются перед нами в новой роли. Мы увидим, что число это не только количество чего-нибудь, оно можеть быть глаголом, действием, движением, преобразующим целые простраснтва! А в конце рассказа полюбуемся симпатичным алгебраическим калейдоскопом, построенным с помощью геометрических чисел.
Продолжаем серию материалов про геометрическую алгебру, которая дарит нам новый глубокий взгляд одновременно и на геометрию и на алгебру. Мы с вами мельком взглянули на алгебру кватернионов к которой сводятся алгебры Клиффорда Cl(0,0,n), увидели какие геометрические возможности даёт нам алгебра Грассмана Сl(0,n,0). Логика повествования должна привести нас к алгебре Cl(n,0,0) в которой вещественные числа расширяются несколькими нетривиальными корнями из единицы — так мы зовём элементы, которые, не будучи вещественными, при возведении в квадрат превращаются в 1.
Один нетривиальный корень из 1 превращает вещественные числа в двойные. В отличие от комплексных чисел, двойные числа не получили широкого распространения в прикладных задачах, представляя просто "ещё одно" возможное расширение, без которого вполне можно обойтись. Например, добавление квадратного корня из отрицательных чисел делает поле комплексных чисел алгебраически замкнутым, позволяя решать любое алгебраическое уравнение. Нетривиальный корень из нуля позволяет производить приближённые вычисления и автоматическое дифференцирование. При первом знакомстве возникает ощущение, что дополнительный корень из единицы никакой особой суперсилы нам не предлагает. Но по-настоящему полезными такие элементы становятся не по одиночке, а в структуре алгебры Клиффорда.
Напомню, что алгебра Клиффорда строится с помощью базисных элементов вида eᵢⱼₖ... = eᵢeⱼeₖ..., которые, в свою очередь, получаются перемножением генераторов е₁, е₂, е₃,... При этом eᵢ² = −1, 0 или 1, и еᵢeₖ = −eₖeᵢ. В алгебре Cl(n,0,0) для всех элементов eᵢ² = 1. И именно такую алгебру сам Вильям Клиффорд назвал геометрической.
Числа, как действия
В математике очень полезно мыслить глаголами, действиями, преобразованиями, и рассматривать объекты, не отделяя их от операций над ними.
В любой алгебраической структуре, например, в группе, для каждого элемента x можно построить функцию y ↦ x·y. Эти функции сами образуют группу с операцией композиции (последовательного вычисления функций). Такие группы называют группами эндоморфизмов, а в программировании этот приём называется каррированием. При всей простоте это на удивление далеко ведущее соображение.
Вещественные числа образуют две группы: аддитивную с операцией сложения и мультипликативную, с операцией умножения. И в каждой такой группе число можно рассматривать, как действие на всё множество чисел. Например, число 2 можно воспринимать, как действие x ↦ x + 2 сдвигающее на две единицы все элементы группы сложения, либо как масштабирование: x ↦ 2x в мультипликативной группе. Число –1 при умножении действует, как отражение относительно нуля, а 0 проецирует числовую ось на нульмерное пространство — в точку. Все числа, таким образом способны воздействовать на одномерное пространство вещественных чисел — числовую ось, переводя её в саму себя. На этом принципе работают, например, логарифмические линейки. Далее мы сосредоточимся на мультипликативном действии чисел.
Добавление в алгебру невещественных генераторов увеличивает размерность числового пространства, оставляя его линейным. Его уже можно, не особо напрягая воображение, рассматривать как геометрическое пространство, населённое точками, векторами и более сложными фигурами.
Учимся извлекать корни
Мы неоднократно называли генераторы геометрической алгебры "квадратными корнями" из –1, 0 и 1. Если число — это преобразование, то какой смысл мы можем вложить в понятие корень из преобразования? Для некоторого действия T его корнем будет такое преобразование R, такое что R∘R = T, здесь кружок обозначает композицию.
Умножение на число −1 соответствует смене знака всех чисел и направлений на противоположное. Поскольку при этом преобразовании только 0 остаётся на месте, геометрически его можно интерпретировать, как поворот пространства относительно точки 0 на половину полного оборота (на 180°) либо, как отражение пространства относительно нулевой точки. В таком случае корень из −1 (мнимая единица) соответствует повороту на четверть полного оборота (на 90°), невозможному в одномерном вещественном мире.
Введение мнимой единицы приводит к увеличению размерности числового пространства, но зато позволяет поворот на 90° сделать эндоморфизмом, тот есть, отображением пространства на самого себя. Умножение на произвольную линейную комбинацию вещественного числа и мнимой единицы можно свести к композиции масштабирования и поворота на некоторый угол, что проявляется в полярной форме комплексных чисел и в знаменитой формуле Эйлера.
Умножение на корень из нуля осуществляет проекцию пространства на подпространство меньшей размерности таким образом, что повторное умножение схлопывает всё пространство в точку — в ноль.
А какому преобразованию соответствует корень из 1? Единица с точки зрения мультипликативного действия — это тождественное преобразование, оставляющее всё на своих местах. Квадратный корень из такого преобразования должен отменять сам себя. Им может быть либо упомянутый поворот на 180°, либо отражение относительно какой-либо прямой линии, плоскости или иного подпространства. Первый случай — это хорошо известный нам со школы корень −1, а вот отражения относительно разных прямых или плоскостей может быть уже много, так что без дополнительного измерения их уже не выразить. Эту-то роль и играют двойные числа.
Давайте рассмотрим алгебраическое действие корня из единицы на двойное число (элемент алгебры с одним генератором е₁):
Если представить пространство дуальных чисел в виде плоскости, то это преобразование, действительно, будет соответствовать отражению от диагональной оси.
Итак, для алгебр Клиффорда с одним генератором мы получаем такое соответствие: корень из –1 поворачивает, корень из 0 — проецирует, корень из 1 — отражает. Какое всë это имеет отношение к построению геометрической алгебры?
Евклидова геометрия строится на основе группы изометрий, то есть, преобразований пространства, сохраняющих евклидовы расстояния между точками. Согласно следствию из теоремы Шаля любые изометрии, можно выразить через композицию отражений. Это значит, что алгебра с умножением на элементы, соответствующим отражениям, будет способна стать полноценной моделью евклидовой геометрии. Именно это имел в виду Уильям Клиффорд, когда называл свои алгебры и числа геометрическими.
Во-вторых, кроме проекции, все остальные упомянутые нами преобразования обратимы, а это значит, что для большей части геометрических чисел обратимым будет и умножение Клиффорда. Это не только существенно облегчает вычисления, доступные в алгебре, в частности, позволяет решать уравнения, выделяя неизвестное привычным образом, но и будет основой для определения геометрических преобразований через операцию сопряжения.
Аффинная геометрическая алгебра
Одного генератора для полноценной геометрии явно недостаточно. Все самое интересное начинается в алгебре с несколькими генераторами. Рассмотрим простейший вариант: Cl(2,0,0) c базисом
Сразу заметим, что псевдоскаляр e₁₂ при возведении в квадрат превращается в –1:
а значит, имея два корня из 1 мы автоматически получаем вдобавок к ним и корень из –1, который, как мы знаем, способен выражать повороты пространства. Это следствие и очередная симпатичная демонстрация теоремы Шаля, говорящей, что любой поворот можно выразить композицией двух отражений.
Если ввести привычное обозначение для мнимой единицы e₁₂ = i, и вспомнить про двойственность, то произвольный элемент алгебры Cl(2, 0,0) можно переписать следующим образом:
Это значит что алгебра Cl(2,0,0) изоморфна двойным числам над полем комплексных чисел или алгебре Cl(1,0,1).
Как и в алгебре Грассмана нас будут интересовать k-векторы и операции с ними. Мы уже увидели, что в этой алгебре бивектор (2-вектор), он же псевдоскаляр, при возведении в квадрат превращается в –1. А как ведут себя 1-векторы при умножении на самих себя? Давайте посмотрим:
Это в точности соответствует квадрату нормы вектора, то есть, скалярному произведению вектора на самого себя. Этот результат можно обобщить на любые коллинеарные векторы
Полезно выяснить как перемножаются ортогональные векторы одинаковой длины:
Мы вновь получили квадрат нормы вектора, но уже не в виде скаляра, а в виде бивектора, или псевдоскаляра. В общем виде произведение двух произвольных 1-векторов даст нам оба варианта:
Мы получили любопытную конструкцию: сумму скаляра и бивектора, то есть, неоднородный элемент алгебры. В скаляре мы без труда узнаем скалярное произведение множителей, а в бивекторе — их внешнее произведение, с которым мы подробно разбирались в предыдущих частях. Однако, какой может быть геометрический смысл в суммировании этих двух произведений?
Тут нам пригодится то, с чего я начал эту статью: геометрические числа имеет смысл рассматривать не только как объекты, но и как действия. В отличие от однородных k-векторов неоднородный элемент является не геометрическим объектом, а геометрическим преобразованием.
Давайте ещё раз обратимся к комплексным числам. После более или менее близкого знакомства с ними нас не должно смущать, что мы "складываем" друг с другом вещи разной природы: вещественные числа и мнимые. Да мы и не складываем их вовсе! Сумма a + bi это удобная запись для упорядоченной пары (a, b), которая соответствует линейному пространству комплексных чисел, образуемых этими парами. А если придерживаться точки зрения на числа, как на действия, то a + bi — это преобразование, выраженное, как линейная комбинация масштабирования и поворота на 90°.
Именно с такой позиции и следует воспринимать "сумму" скаляра и бивектора, как упорядоченную пару, вернее, линейную комбинацию двух элементов алгебры. Тогда становится понятным смысл этого результата: подобно комплексному числу, которое при умножении действует как композиция масштабирования (вещественная часть) и поворота (мнимая часть), геометрическое произведение двух векторов тоже представляет собой некоторую композицию двух преобразований элементов геометрического пространства. Причём, как мы выяснили, бивектор это корень из –1, а значит мы получили некоторый поворот пространства относительно нуля.
Посмотрим, как этот поворот действует на исходные векторы:
Получается, что произведение uv переводит вектор v в вектор u при умножении слева (с некоторым масштабированием), и вектор u в вектор v при умножении справа. Таким образом геометрическое произведение двух векторов имеет совершенно замечательный смысл преобразования, переводящего второй вектор в первый. Для двух векторов, начинающихся из одной точки, это преобразование и будет композицией поворота и масштабирования. Пример его действия на пространство показано на рисунке:
На результат перемножения двух векторов полезно взглянуть с позиции дистрибутивности умножения. Вектор v в произведении uv можно рассмотреть, как сумму двух компонент — параллельной и ортогональной вектору u:
Тогда произведение vu можно разложить таким образом:
В этом разложении вновь отчётливо виден геометрический смысл произведения двух векторов, как поворота на угол между векторами.
Для того, чтобы задать "чистый" поворот, без масштабирования нужно использовать нормированные векторы. Отсюда мы получаем возможный вид оператора поворота на заданный угол в алгебре Cl(2,0,0):
В геометрической алгебре он традиционно называется ротором.
От поворота к отражению
Итак мы выяснили, что произведение двух векторов в Cl(2,0,0) действует на третий вектор, как поворот. В то же самое время, мы говорили прежде, что каждый из векторов действует как отражение. Нет ли здесь противоречия?
Обратите внимание на то, что умножение на вектор повышает ранг результата -- скаляр превращается в вектор, а вектор -- в бивектор. Можно ли вернуть ранг результата обратно? Вспомним, что геометрическое умножение векторов обратимо, а это значит, что у нас есть возможность не только умножать на векторы, но и делить на них. А поскольку умножение некоммутативно, то умножение с одной стороны и деление с другой не уничтожат друг друга, а превратятся в очень полезную операцию: vuv⁻¹, которая называется сопряжением. Она соответствует преобразованиям, сохраняющим ранг объекта, то есть оставляет точки точками, прямые прямыми и т. д.
Но для того, чтобы воспользоваться сопряжением, надо выяснить как делить на векторы. Традиционная линейная алгебра ничего по этому поводу не предлагает, а в геометрической алгебре это на удивление просто. Обратным элементом для x будет такой элемент x⁻¹, который при умножении на x даст единицу. Поскольку, как мы выяснили, любой вектор при возведении в квадрат превращается в скаляр, то отыскать для ненулевого вектора обратный элемент не составит труда:
Сопряжение, в отличие от умножения, сохраняет ранг и размерность геометрических объектов, так что именно эта операция в алгебре Cl(n,0,0) и соответствует зеркальному отражению.
Оператор отражения называют флектором:
Сопрягать элементы можно не только с вектором, но и с бивектором. Это позволяет избавиться от масштабирования при повороте, поскольку обратный элемент делится на квадрат своей нормы. Таким образом выражается поворот на удвоенный угол между произвольными векторами u и v:
Такой вариант ротора предпочтительнее того, что мы приводили выше, поскольку он сохраняет ранг элемента x, а значит и размерность подпространства, которое этот элемент представляет. По этой причине он универсален и работает в геометрической алгебре любой размерности.
Позже мы научимся превращать его в поворот на одинарный угол, извлекая из него квадратный корень.
Подведём итог
Геометрическое умножение 1-векторов в алгебре Клиффорда Cl(2,0,0) с двумя генераторами представляет линейную комбинацию скалярного и внешнего произведений этих векторов. При этом нетрудно выделить оба эти произведения, как отдельные операции:
Таким образом, алгебра Cl(2,0,0) содержит в себе внешнюю алгебру Грассмана и дополняет её скалярным произведением 1-векторов. Это значит, что всё чему мы научились во внешней алгебре (вычислять дополнения, пересечения и соединения подпространств) остаётся нам доступным.
Вместе со скалярным произведением мы получаем обратимость умножения для векторов и очень ясный смысл геометрического произведения, как преобразования, переводящего один вектор в другой.
Кроме того, псвдоскаляр в этой алгебре является корнем из –1, и значит алгебра Cl(2,0,0) содержит в себе и поле комплексных чисел. Поэтому произведение векторов, бивектор, ведёт себя как поворот, а сопряжение с вектором, как зеркальное отражение.
Пока мы ограничились рассмотрением двумерной афинной геометрии, в которой есть только 1-векторы и, к тому же все они имеют общее начало. В такой геометрии уже можно вращать и отражать объекты, но нельзя делать параллельный перенос. Однако мы уже знаем, что сделать для того, чтобы отвязать геометрию от единственной точки, для нужно перейти в проективное пространство.
В следующей статье мы внимательнее рассмотрим скалярное произведение и его смысл для векторов более высокого ранга.
* * *
В качестве иллюстрации к сегодняшнему материалу я предлагаю построить математическую модель хорошо известной детской игрушки —калейдоскопа, в котором ключевую роль играют зеркальные отражения.
Как мы знаем с детства, два зеркала способны породить условно бесконечное количество отражений произвольного изображения (о том, сколько их может быть на самом деле, мы говорили тут).
В языке Haskell мы можем сгенерировать бесконечную последовательность отражений от нескольких зеркал следующим образом:
На базе этих функций можно построить калейдоскоп, который произвольное изображение отражает n раз от заданной системы зеркал.
Вот как выглядят отражения точки от пары зеркал, расположенных под углом:
В детской игрушке три зеркала, которые образуют треугольник. В этом случае отражения заполняют всю плоскость:
Наконец, если вместо единственной точки мы разместим в нашем калейдоскопе несколько разноцветных "стёклышек", то получим узнаваемый узор:
Заставив треугольники вращаться, мы получим настоящий калейдоскоп!