Курс начальной школы приучает нас к тому, что числа пригодны для счёта. В средней школе, когда к математике подключаются физика и химия, мы узнаём, что числами можно моделировать всевозможные явления от наполнения бассейнов и движения велосипедистов, до количества тепла, которое выделится, если дать соединиться двум молям водорода и одному молю кислорода. А в старших классах на смену числам приходят функции, векторы и другие замечательные математические объекты, которыми можно моделировать ещё более сложные процессы и явления. Однако, если заглянуть в «большую» математику, обитающую в университетах, а также в статьях и книгах, посвящённых специальным разделам математики, то можно обнаружить что числа, вернее числовые системы: кольца, поля, их расширения и модули над ними, сами по себе оказываются способны на многое. Ими можно моделировать целые пространства, геометрические объекты и их преобразования (комплексные числа, кватернионы, алгебры Клиффорда), регулярные структуры, обладающие пространственной симметрией (числа Гаусса, Эйзенштейна) или преобразования специальной теории относительности (дуальные числа, алгебра пространства-времени).
В этой серии статей мы слегка прикоснулись к некоторым таким системам, а именно к двумерным модулям над целыми и вещественными числами и смогли навести в них определённый порядок, введя классификацию этих арифметик с помощью элементов теории представлений. Сегодня настала пора поговорить о параболических арифметиках, к которым относятся необычные дуальные числа и обычные рациональные дроби.
Оглавление серии
-
Изобретаем параболические числа
Развивая линейный подход к арифметике, мы пришли к тому, что начали рассматривать элементы арифметики, как линейные преобразования. Это позволяет вместо экзотических числовых систем рассматривать матрицы из «обычных» чисел — целых или вещественных. Таким образом, вся информация о свойствах базовых элементов и, соответственно, всей арифметики, заключается в матрицах, представляющих эти элементы.
Сегодня мы рассмотрим вариант с вырожденной матрицей-представлением расширяющего элемента, определитель которой будет равен нулю. В этом случае мы получим представление для любопытного числа, отличного от нуля, но решающего уравнение , то есть, дающего ноль, при возведении в квадрат. Вот простейший пример такой матрицы:
Своеобразный зверь, его можно назвать «корнем из нуля». Давайте посмотрим для чего бы он мог пригодиться.
Расширяя поле вещественных чисел необычным числом , мы получаем арифметику дуальных чисел. Интерпретировать математический объект можно как «бесконечно малую» или инфинитезимальную величину, которая исчезает при возведении в любую степень, превышающую первую.
Исчисление бесконечно малых приводит к математическому анализу, и дуальная арифметика оказывается непосредственно с ним связана: при вычислении какого-либо дробно-рационального выражения , вещественная часть будет равна значению , а дуальная даст значение первой производной от этого выражения:
Посмотрите на несколько примеров, обращая внимание на верхний правый элемент результатов, и сами убедитесь, что простое перемножение и обращение матриц способно корректно дифференцировать дробно-рациональные функции :
Здесь обозначает единичную матрицу, то есть, представление вещественного числа, а минус первая степень — обращение матрицы. Эта техника называется автоматическим дифференцированием, и не предполагает никаких операций, кроме базовой арифметики и стандартных действий над матрицами.
Примеры, вычисленные в Julia
Для проверки явно вычислим производную в последнем примере
Это был пример символьных матричных вычислений, но смысл автоматического дифференцирования состоит в том, что эти же вычисления можно провести исключительно в числах «ничего не зная» о производных. Все приведённые выше вычисления можно произвести для конкретного значения , скажем, равного 3:
Здесь все вычисления это простые матричные операции с вещественными числами, с которыми справится любой инженерный калькулятор или язык программирования. После небольшой доработки в дуальных числах можно вычислять и трансцендентные функции: экспоненты, логарифмы, тригонометрию и так далее. Особенно эффективны такие вычисления для глубоко вложенных функций.
Минутка красоты
Рассказывая о математике, особенно школьникам и студентам, очень хочется сухие формулы разбавить красивыми картинками. Автоматическое дифференцирование с помощью матричного представления дуальных чисел позволяет очень элегантно рисовать так называемые фракталы Ньютона.
Метод создания картинок такой. Задаём несколько точек на комплексной плоскости, и по ним строим многочлен, имеющий эти точки корнями:
После этого каждой точке на комплексной плоскости ставим в соответствие функцию возвращающую число шагов, которое необходимо методу Ньютона для достижения какого-либо корня многочлена , начиная с исходной точки. Изображение формируется как поле значений функции .
Метод Ньютона — один из хорошо известных методов численного решения алгебраических уравнений. Суть его очень проста: имея некоторое приближение к точке, в которой график функции пересекает ось абсцисс, мы уточняем его, следуя касательной к графику в этой точке, и находим новое приближение там, где касательная пересекает ось Ох.
В виде формулы это уточнение записывается таким образом:
По мере повторения этих уточнений, последовательность приближений сходится к истинному нулю функции чрезвычайно быстро. Если, конечно, сходится. Очень легко найти такие неудачные функции и начальные точки, при которых процесс уточнения сходящимся уже не будет. Существуют методы борьбы с этим явлением, однако, если нас интересуют не корни, а красивые картинки, то эта особенность метода Ньютона нам только на руку. Именно скорость сходимости является той величиной, которая обладает красивыми фрактальными свойствами.
К достоинствам метода Ньютона относится то, что он прекрасно работает как для вещественных так и для комплексных чисел, не требуя никаких изменений. Красивые картинки получаются именно при переходе в комплексную плоскость. Дуальные числа тоже можно строить не только над вещественными числами, но и над комплексными, используя точно такое же матричное представление.
Вот как может выглядеть простая программа на языке Julia, в котором матричные вычисления в комплексных числах идут «из коробки»:
function poly(roots, z)
res = prod([[z-r 1; 0 z-r] for r ∈ roots])
return (res[1], res[3])
end
function steps(roots, x0, m=20)
x = x0
for i ∈ 0:m
(f,df) = poly(roots,x)
next = x - f/df
if abs(x - next) < 1e-12
return i
end
x = next
end
return m
end
# Формируем изображение для корней 5-й степени из единицы.
using Plots;
plot(legend=false, aspectratio=1, ticks=false, size=(500, 500));
K = 5;
roots = [exp(im*2k*π/K) for k ∈ 0:K-1];
R = range(-1.2, 1.2, length=500);
heatmap!([steps(roots, x + y*im, 50) for x ∈ R, y ∈ R])
Функция poly
вычисляет полином по множеству заданных корней в точке z
, используя для автоматического дифференцирования матричное представление дуальных чисел (вся магия происходит в строке 2). Она возвращает значения полинома и его производной в указанной точке. Функция steps
реализует стандартный метод Ньютона с подсчётом шагов.
Добавляя корни или перемещая их по комплексной плоскости,можно получить очень симпатичные картинки и анимации.
Исчисление погрешностей
Математика, как известно, наука точная, тогда как мир вне нашего сознания полон неожиданностей, приближений и погрешностей. И математикам неизбежно пришлось приспособиться к этому, выработав инструменты для работы с величинами, которые известны лишь приблизительно.
Любое измерение имеет некоторую погрешность той или иной природы. Это приводит к необходимости говорить не о значении числа, о паре чисел: значении и абсолютной погрешности , которую мы привычно обозначаем так: .
Давайте вспомним как оценивается значение некоторой функции от приближённой величины . Малые изменения аргумента функции приводят к малым изменениям её значения, которые, в свою очередь, пропорциональны производной функции в точке . Если функция гладкая, эти соображения приводят нас к линейному приближению значения функции:
Это хорошо известные основы математического анализа, на которых базируются методы приближённых вычислений. Наши достижения в области алгебростроения позволяют применить параболическую арифметику дуальных чисел к задаче вычисления алгебраических выражений с известной абсолютной погрешностью.
Напомню, что дуальные числа строятся, как расширение вещественных чисел нетривиальным решением уравнения , которую можно интерпретировать как бесконечно малую величину , обращающуюся в ноль, при возведении в степень больше первой. Таким образом, мы можем моделировать приближённую величину, как дуальное число, и перейти к его линейному представлению в виде матрицы:
Как мы уже видели, дуальные числа умеют производить автоматическое дифференцирование, так что почти всю возню с производными мы можем перепоручить матрицам.
-
При сложении абсолютные погрешности складываются:
-
При перемножении приближенных величин, складываются их относительные погрешности . Абсолютная погрешность результата при этом равна произведению результата и его относительной погрешности
-
Возведение в степень увеличивает относительную погрешность в раз.
Как видим, с операциями сложения и умножения матричное представление справляется отлично, так что мы получили качественное полукольцо вещественных чисел с погрешностью. А как обстоят дела с вычитанием и делением? Или спросим как алгебраисты: как должны строиться противоположные и обратные элементы в нашей числовой системе?
Здесь придется вводить определённые искусственные правила, не вытекающие напрямую только из линейного представления дуальных чисел. Если прямо следовать дуальной арифметике, то можно получить следующий результат:
Но увы, погрешности при вычитании тоже растут: невозможно повысить точность просто складывая или вычитая неточные значения, для этого используются иные методы, выходящие за рамки алгебры.
Так что погрешности не бывают отрицательными, и, следовательно, не образуют группу по сложению. Это можно оправдать симметричностью погрешности относительно ожидаемого значения числа, а формально сказать, что знаки «плюс‑минус» и «минус‑плюс» тождественны друг другу.
С этой особенностью справляется интервальная арифметика, и представляющие её двойные числа, но они не дают настолько чистого автоматического дифференцирования, по существу, заменяя его на конечные приближения в случае малых интервалов.
Ну, коль скоро линейная алгебра сама не справляется, придётся нам искусственно определить представление для противоположного элемента нашей арифметики следующим образом:
Тогда вычисление разности двух значений с погрешностью будет вычисляться корректно:
С такой операцией вычитания мы превращаем арифметику чисел с погрешностью в кольцо.
В рамках линейного представления делению (умножению на обратный элемент) соответствует умножение на обратную матрицу. Для этого необходимо чтобы матрица, представляющая число была обратима. Условие обратимости — отличие от нуля определителя, который для представления числа равен . Отсюда делаем вывод: любое ненулевое число обратимо, тогда как на ноль или на делить нельзя. В этом состоит отличие этой арифметики от арифметик эллиптического или гиперболического типов, в которых числа с нулевой вещественной частями были обратимыми.
Поскольку в нашей арифметике есть нетривиальные делители нуля: нули с различной погрешностью, то наше кольцо в поле превратить не удастся, но это не страшно. Кольцо — тоже хорошее дело!
Давайте обратим матрицу для произвольного ненулевого элемента нашей арифметики:
При этом опять вылезает некорректная отрицательная погрешность. Но переопределять обращение матриц мы не будем, а вместо этого, так же как с вычитанием, переопределим обращение числа с погрешностью следующим образом:
Вот так будет выглядеть деление для двух приближённых значений:
Введя простое формальное правило: «во всех обратных операциях погрешность формально меняет знак», мы получаем полноценную алгебру, имеющую линейное представление.
Использование матриц вместо суммы может показаться усложнением, но матричная алгебра, в отличие от реализации дуальных чисел, есть в инструментарии большинства языков программирования, в пакетах символьных вычислений и даже в некоторых калькуляторах (как например в том, которым я пользуюсь на своём телефоне). Линейное представление позволяет легко производить оценку погрешностей, пользуясь любым из этих инструментов без необходимости их перепрограммирования.
Примеры
Решим пару задач в «ванильном» Julia, без использования каких-то дополнительных библиотек:
1. Размеры комнаты 5 м × 6 м × 2,7 м сняли с помощью рулетки с абсолютной точностью в 0.5 см. Каков объём комнаты?
Как видим, погрешность в измеренном таким образом объёме составит треть кубического метра.
2. А вот задачка с решением из сборника задач по приближённым вычислениям:
Решим этот же пример с помощью матриц:
Обработка экспериментальных данных, конечно, не ограничивается арифметикой, нужны и корни различных степеней, и трансцендентные функции. Для них легко ввести общее правило, с которого мы и начали наш разговор:
Арифметический зоопарк
Мы с вами большие молодцы! Начали с построения модели целых чисел, а потом понеслось: рациональные дроби, числа Гаусса и Эйзенштейна, двойные числа и прочие расширения! Результатом стала вот такая карта мира линейных представлений для линейных арифметик (модулей) второго порядка с некоторыми любопытными и полезными экземплярами:
Остались вне нашего внимания старые добрые рациональные числа, тоже представляющие собой пару , в которой первый элемент мы называем числителем, а второй — знаменателем. В какой клетке нашего зоопарка двумерных арифметик живут рациональные числа, вернее, их модели?
Во второй статье серии мы детально прошлись по правилам арифметики дробей, то есть модели рациональных чисел в форме пар, отражающих коэффициенты однородного линейного уравнения. Получился такой набор операций:
Налицо линейность всех операций, но есть в этой арифметике кое-что необычное. Во всех рассматриваемых нами алгебрах сложение было поэлементным (как у векторов), а роль умножения доставалась их линейной комбинации. Это позволяло нам использовать линейные представления в форме матриц и полагаться на хорошо разработанные методы линейной алгебры.
В модели рациональных чисел всё наоборот: сложение выглядит как линейная комбинация, а умножение — как поэлементное перемножение. Давайте поразмыслим, с чем это может быть связано.
Имея кольцо целых чисел и желая добавить к нему дроби, мы можем расширить его, например, числом , то есть, решением уравнения , не имеющего целочисленного решения. Давайте сравним поведение этого элемента, с поведением гиперболической единицы (решением уравнения , отличным от единицы). Рассмотрим арифметическую и геометрическую прогрессии с этими элементами (говоря на языке алгебры, на орбиты этих элементов в аддитивной и мультипликативной группах):
Присмотритесь, есть некоторая симметрия между этими последовательностями. Число с умножением образует так называемую свободную группу, такую же, как число с операцией сложения. Такие группы имеют бесконечное число элементов и они изоморфны группе целых чисел со сложением. В то же время, со сложением число уже ведёт себя по-другому, оно то появляется, то исчезает, превращая себя в целую часть. Подобное поведение, только в более чистом виде, наблюдается при многократном умножении на , где этот элемент образует циклическую группу второго порядка.
Получается, что эти две числовые системы сходны, хоть и не идентичны. В них меняются местами сложение и умножение. Даже определяющие уравнения у расширений, на которых строятся эти две системы демонстрируют двойственность:
Выходит, что дроби, решая уравнения , двойственны элементам, решающим уравнения , которые мы рассматривали до этого.
Привычно расширяя целые числа элементом , мы можем получить систему двоичных дробей , которое обладает рядом замечательных свойств, оно позволяет сколь угодно близко подобраться к любому рациональному и вещественному числу, то есть, обладает свойством полноты.
Именно по этому принципу строится широко распространённая модель рациональных чисел — десятичные дроби. Она получается расширением кольца из десяти цифр (кольца вычетов по модулю 10) новым формальным элементом . И также как расширение , оно позволяет получить приближение к любому вещественному числу.
Рассуждая с дочкой пятиклассницей о преимуществах различных видов дробей, мы пришли к выводу, что десятичные дроби и проценты удобнее складывать, а обыкновенные удобнее перемножать. Так что умение видеть в десятичных дробях обыкновенные — полезный навык для школьника.
Сейчас мы готовы объяснить алгебраически почему это так. Десятичные дроби, как линейное расширение привычного кольца цифр, имеют простое «покомпонентное» сложение, лишь немного усложнённое переносом между разрядами. В то же время для умножения мы получаем свободную группу, так что, например, решение простецкого уравнения задействует все возможные степени такого расширения
В арифметике дробей операции сложения и умножения как бы меняются местами. В поле , кроме решения уравнения , есть решения и других уравнений: , и т.д. таким образом любое уравнение типа , решается тривиально, в виде соответствующий дроби. Сложение же требует более сложной линейной комбинации, которую мы знаем, как приведение к общему знаменателю.
Таким образом, простым линейным расширением из целых чисел получить рациональные дроби можно, только добавляя бесконечное множество элементов вида для простых . Но можно пойти и другим путём, и воспользоваться замеченной нами двойственностью, подобрав подходящую матрицу для представления операции сложения. На эту роль подходит такой объект:
Сложение дробей будет представлено классическим умножением этих матриц
Умножением двух дробей будет их поэлементное перемножение:
А по-настоящему представлять рациональные числа эти матрицы будут после факторизации по отношению эквивалентности, которое отождествляет с единицей все элементы вида:
Это отношение регулярную квадратную решётку целочисленных пар превращает в множество прямых, проходящих через эквивалентные пары, и пересекающихся в нулевой точке, как мы видели в статье о рациональных числах.
Матрицы, представляющие арифметику дробей относятся к параболическому типу, поскольку их характеристическое уравнение имеет кратные корни. Следовательно, орбитами для сложения будут параболы:
Не могу сказать, что это представление даёт какое-то более глубокое понимание рациональных чисел, чем то что мы знаем со школы. Я добавил этот пример для полноты картины мира арифметик.
А что дальше?
Мы рассмотрели расширения числовых систем одним элементом, получая двумерные арифметики. При этом мы ограничивались такими дополнительными элементами, которые могут быть представлены матрицами 2×2. Характеристические уравнения для таких матриц могут иметь степень не выше второй, а это значит, что такие матрицы, в общем виде, представляют решения приведённых квадратных уравнений. Но конечно, кроме квадратичных элементов для расширения можно использовать и элементы более высокого порядка. Однако, тогда и количество расширяющих элементов будет расти. Для примера, добавим в целым числам решение уравнения . Возведение этого элемента в квадрат приведёт к появлению нового элемента: кубического корня из 4, который не сводится к линейной комбинации целых чисел и . Таким образом, в этом расширении любое число может быть представлено, как линейная комбинация трех элементов: .
Корни расширяющего уравнения сами имеют некоторую симметрию и образуют группу, которая называется группой Галуа. Её свойства, а именно, структура подгрупп определяет, будет ли это уравнение разрешимо алгебраически. Так в XIX веке удалось обобщить теорему Абеля о неразрешимости в общем виде уравнений пятой степени, до теории Галуа, которая для заданного уравнения некоторой степени позволяет сделать вывод о его разрешимости.
Но, пожалуй, наиболее интересным и актуальным продолжением начатой темы для аудитории Хабра будет расширение поля вещественных чисел несколькими различными «корнями» из единиц и нулей. Речь идёт о геометрических алгебрах — алгебрах Грассмана, в которых используется несколько корней из нуля (параболических расширения ) и алгебрах Клиффорда, к которым относятся кватернионы (расширение тремя эллиптическими единицами), проективная геометрическая алгебра (PGA,с расширением несколькими гиперболическими и одним параболическим элементами) и конформная геометрическая алгебра (CGA, расширение эллиптическими и гиперболическими единицами). По мере развития вычислительной техники, алгебраический подход к геометрии становится востребован и позволяет по-новому взглянуть на задачи моделирования трёхмерного пространства как для компьютерной графики, так и для распознавания трехмерных сцен.
Мягкому, но последовательному введению в геометрические алгебры я планирую посвятить следующую серию статей.
Автор: samsergey