Математическая продлёнка. Изобретаем параболические числа
Курс начальной школы приучает нас к тому, что числа пригодны для счёта. В средней школе, когда к математике подключаются физика и химия, мы узнаём, что числами можно моделировать всевозможные явления от наполнения бассейнов и движения велосипедистов, до количества тепла, которое выделится, если дать соединиться двум молям водорода и одному молю кислорода. А в старших классах на смену числам приходят функции, векторы и другие замечательные математические объекты, которыми можно моделировать ещё более сложные процессы и явления. Однако, если заглянуть в «большую» математику, обитающую в университетах, а также в статьях и книгах, посвящённых специальным разделам математики, то можно обнаружить что числа, вернее числовые системы: кольца, поля, их расширения и модули над ними, сами по себе оказываются способны на многое. Ими можно моделировать целые пространства, геометрические объекты и их преобразования (комплексные числа, кватернионы, алгебры Клиффорда), регулярные структуры, обладающие пространственной симметрией (числа Гаусса, Эйзенштейна) или преобразования специальной теории относительности (дуальные числа, алгебра пространства-времени).
В этой серии статей мы слегка прикоснулись к некоторым таким системам, а именно к двумерным модулям над целыми и вещественными числами и смогли навести в них определённый порядок, введя классификацию этих арифметик с помощью элементов теории представлений. Сегодня настала пора поговорить о параболических арифметиках, к которым относятся необычные дуальные числа и обычные рациональные дроби.
Оглавление серии
Изобретаем параболические числа
Развивая линейный подход к арифметике, мы пришли к тому, что начали рассматривать элементы арифметики, как линейные преобразования. Это позволяет вместо экзотических числовых систем рассматривать матрицы из «обычных» чисел — целых или вещественных. Таким образом, вся информация о свойствах базовых элементов и, соответственно, всей арифметики, заключается в матрицах, представляющих эти элементы.
Сегодня мы рассмотрим вариант с вырожденной матрицей-представлением расширяющего элемента, определитель которой будет равен нулю. В этом случае мы получим представление для любопытного числа, отличного от нуля, но решающего уравнение
Своеобразный зверь, его можно назвать «корнем из нуля». Давайте посмотрим для чего бы он мог пригодиться.
Расширяя поле вещественных чисел необычным числом
Исчисление бесконечно малых приводит к математическому анализу, и дуальная арифметика оказывается непосредственно с ним связана: при вычислении какого-либо дробно-рационального выражения
Посмотрите на несколько примеров, обращая внимание на верхний правый элемент результатов, и сами убедитесь, что простое перемножение и обращение матриц способно корректно дифференцировать дробно-рациональные функции :
Здесь
Примеры, вычисленные в Julia
Для проверки явно вычислим производную в последнем примере
Это был пример символьных матричных вычислений, но смысл автоматического дифференцирования состоит в том, что эти же вычисления можно провести исключительно в числах «ничего не зная» о производных. Все приведённые выше вычисления можно произвести для конкретного значения
Здесь все вычисления это простые матричные операции с вещественными числами, с которыми справится любой инженерный калькулятор или язык программирования. После небольшой доработки в дуальных числах можно вычислять и трансцендентные функции: экспоненты, логарифмы, тригонометрию и так далее. Особенно эффективны такие вычисления для глубоко вложенных функций.
Минутка красоты
Рассказывая о математике, особенно школьникам и студентам, очень хочется сухие формулы разбавить красивыми картинками. Автоматическое дифференцирование с помощью матричного представления дуальных чисел позволяет очень элегантно рисовать так называемые фракталы Ньютона.
Метод создания картинок такой. Задаём несколько точек
После этого каждой точке
Метод Ньютона — один из хорошо известных методов численного решения алгебраических уравнений. Суть его очень проста: имея некоторое приближение к точке, в которой график функции пересекает ось абсцисс, мы уточняем его, следуя касательной к графику в этой точке, и находим новое приближение там, где касательная пересекает ось Ох.
В виде формулы это уточнение записывается таким образом:
По мере повторения этих уточнений, последовательность приближений
К достоинствам метода Ньютона относится то, что он прекрасно работает как для вещественных так и для комплексных чисел, не требуя никаких изменений. Красивые картинки получаются именно при переходе в комплексную плоскость. Дуальные числа тоже можно строить не только над вещественными числами, но и над комплексными, используя точно такое же матричное представление.
Вот как может выглядеть простая программа на языке 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. Характеристические уравнения для таких матриц могут иметь степень не выше второй, а это значит, что такие матрицы, в общем виде, представляют решения приведённых квадратных уравнений. Но конечно, кроме квадратичных элементов для расширения можно использовать и элементы более высокого порядка. Однако, тогда и количество расширяющих элементов будет расти. Для примера, добавим в целым числам решение уравнения
Корни расширяющего уравнения сами имеют некоторую симметрию и образуют группу, которая называется группой Галуа. Её свойства, а именно, структура подгрупп определяет, будет ли это уравнение разрешимо алгебраически. Так в XIX веке удалось обобщить теорему Абеля о неразрешимости в общем виде уравнений пятой степени, до теории Галуа, которая для заданного уравнения некоторой степени позволяет сделать вывод о его разрешимости.
Но, пожалуй, наиболее интересным и актуальным продолжением начатой темы для аудитории Хабра будет расширение поля вещественных чисел несколькими различными «корнями» из единиц и нулей. Речь идёт о геометрических алгебрах — алгебрах Грассмана, в которых используется несколько корней из нуля (параболических расширения
Мягкому, но последовательному введению в геометрические алгебры я планирую посвятить следующую серию статей.