В математике и информатике [1] компьютерная алгебра , также называемая символьным вычислением или алгебраическим вычислением , является научной областью, которая относится к изучению и разработке алгоритмов и программного обеспечения для манипулирования математическими выражениями и другими математическими объектами . Хотя компьютерную алгебру можно считать подобластью научных вычислений , их обычно рассматривают как отдельные области, поскольку научные вычисления обычно основаны на численных вычислениях с приблизительными числами с плавающей точкой , в то время как символьные вычисления подчеркивают точные вычисления с выражениями, содержащими переменные , которые не имеют заданного значения и манипулируются как символы.
Программные приложения, которые выполняют символьные вычисления, называются системами компьютерной алгебры , при этом термин «система» намекает на сложность основных приложений, которые включают, по крайней мере, метод представления математических данных на компьютере, пользовательский язык программирования (обычно отличающийся от языка, используемого для реализации), специализированный менеджер памяти, пользовательский интерфейс для ввода/вывода математических выражений, большой набор процедур для выполнения обычных операций, таких как упрощение выражений, дифференцирование с использованием цепного правила , разложение полинома на множители , неопределенное интегрирование и т. д.
Компьютерная алгебра широко используется для экспериментов в математике и для разработки формул, используемых в числовых программах. Она также используется для полных научных вычислений, когда чисто числовые методы не срабатывают, как в криптографии с открытым ключом , или для некоторых нелинейных задач.
Некоторые авторы различают компьютерную алгебру и символьные вычисления, используя последнее название для обозначения видов символьных вычислений, отличных от вычислений с математическими формулами . Некоторые авторы используют символьные вычисления для компьютерного аспекта предмета и «компьютерную алгебру» для математического аспекта. [2] В некоторых языках название области не является прямым переводом ее английского названия. Как правило, на французском языке она называется calcul formel , что означает «формальное вычисление». Это название отражает связи этой области с формальными методами .
Символьные вычисления в прошлом также назывались символическими манипуляциями , алгебраическими манипуляциями , символической обработкой , символической математикой или символической алгеброй , но эти термины, которые также относятся к невычислительным манипуляциям, больше не используются по отношению к компьютерной алгебре.
Не существует научного общества , которое бы специализировалось на компьютерной алгебре, но эта функция выполняется специальной группой по интересам Ассоциации вычислительной техники под названием SIGSAM (Специальная группа по символическим и алгебраическим манипуляциям) [3] .
Проводится несколько ежегодных конференций по компьютерной алгебре, главной из которых является ISSAC (Международный симпозиум по символьным и алгебраическим вычислениям), который регулярно спонсируется SIGSAM. [4]
Существует несколько журналов, специализирующихся на компьютерной алгебре, ведущим из которых является Journal of Symbolic Computation, основанный в 1985 году Бруно Бухбергером . [5] Также существует несколько других журналов, которые регулярно публикуют статьи по компьютерной алгебре. [6]
Поскольку численное программное обеспечение очень эффективно для приближенных числовых вычислений , в компьютерной алгебре принято подчеркивать точные вычисления с точно представленными данными. Такое точное представление подразумевает, что даже когда размер выходных данных мал, промежуточные данные, сгенерированные во время вычисления, могут расти непредсказуемым образом. Такое поведение называется набуханием выражения . [7] Чтобы обойти эту проблему, используются различные методы представления данных, а также алгоритмы, которые ими манипулируют. [8]
Обычные числовые системы, используемые в числовых вычислениях, — это числа с плавающей точкой и целые числа фиксированного ограниченного размера. Ни одна из них не удобна для компьютерной алгебры из-за раздувания выражений. [9]
Таким образом, основные числа, используемые в компьютерной алгебре, являются целыми числами математиков, обычно представленными неограниченной знаковой последовательностью цифр в некоторой базе счисления , обычно самой большой базе, допускаемой машинным словом . Эти целые числа позволяют определить рациональные числа , которые являются несократимыми дробями двух целых чисел.
Программирование эффективной реализации арифметических операций — сложная задача. Поэтому большинство свободных систем компьютерной алгебры и некоторые коммерческие, такие как Mathematica и Maple , [10] [11] используют библиотеку GMP , которая, таким образом, является стандартом де-факто .
За исключением чисел и переменных , каждое математическое выражение можно рассматривать как символ оператора, за которым следует последовательность операндов. В программном обеспечении компьютерной алгебры выражения обычно представляются таким образом. Это представление очень гибкое, и многие вещи, которые на первый взгляд не кажутся математическими выражениями, могут быть представлены и обработаны как таковые. Например, уравнение — это выражение с "=" в качестве оператора, матрица может быть представлена как выражение с "matrix" в качестве оператора и ее строками в качестве операндов.
Даже программы могут рассматриваться и представляться как выражения с оператором «процедура» и, по крайней мере, двумя операндами, списком параметров и телом, которое само по себе является выражением с «телом» в качестве оператора и последовательностью инструкций в качестве операндов. Наоборот, любое математическое выражение может рассматриваться как программа. Например, выражение a + b может рассматриваться как программа для сложения с a и b в качестве параметров. Выполнение этой программы заключается в оценке выражения для заданных значений a и b ; если им не заданы никакие значения, результатом оценки являются просто его входные данные.
Этот процесс отложенной оценки является фундаментальным в компьютерной алгебре. Например, оператор "=" уравнений также является, в большинстве систем компьютерной алгебры, именем программы проверки равенства: обычно оценка уравнения приводит к уравнению, но, когда требуется проверка равенства, либо явно запрашиваемая пользователем через команду "оценка до булевой", либо автоматически запускаемая системой в случае проверки внутри программы, то выполняется оценка до булевого результата.
Поскольку размер операндов выражения непредсказуем и может изменяться в течение рабочего сеанса, последовательность операндов обычно представляется в виде последовательности либо указателей (как в Macsyma ) [13] , либо записей в хэш-таблице (как в Maple ).
Грубое применение основных правил дифференцирования по x к выражению дает результат
Обычно желательно более простое выражение, а при работе с общими выражениями необходимо упрощение.
Это упрощение обычно выполняется с помощью правил переписывания . [14] Существует несколько классов правил переписывания, которые следует рассмотреть. Простейшими являются правила, которые всегда уменьшают размер выражения, например E − E → 0 или sin(0) → 0. Они систематически применяются в системах компьютерной алгебры.
Сложность возникает с ассоциативными операциями, такими как сложение и умножение. Стандартный способ борьбы с ассоциативностью — считать, что сложение и умножение имеют произвольное количество операндов, то есть a + b + c представляется как "+"( a , b , c ) . Таким образом, a + ( b + c ) и ( a + b ) + c оба упрощаются до "+"( a , b , c ) , что отображается как a + b + c . В случае таких выражений, как a − b + c , простейший способ — систематически переписать − E , E − F , E / F как, соответственно, (−1)⋅ E , E + (−1)⋅ F , E ⋅ F −1 . Другими словами, во внутреннем представлении выражений нет ни вычитания, ни деления, ни унарного минуса, за пределами представления чисел.
Другая трудность возникает с коммутативностью сложения и умножения. Проблема заключается в быстром распознавании подобных членов для их объединения или отмены. Проверка каждой пары членов является затратной с очень длинными суммами и произведениями. Чтобы решить эту проблему, Macsyma сортирует операнды сумм и произведений в порядке, который размещает подобные члены в последовательных местах, что позволяет легко их обнаружить. В Maple хэш -функция предназначена для генерации коллизий при вводе подобных членов, позволяя объединять их сразу после ввода. Это позволяет подвыражениям, которые появляются несколько раз в вычислении, немедленно распознаваться и сохраняться только один раз. Это экономит память и ускоряет вычисления, избегая повторения одних и тех же операций над идентичными выражениями.
Некоторые правила перезаписи иногда увеличивают, а иногда уменьшают размер выражений, к которым они применяются. Это случай дистрибутивности или тригонометрических тождеств . Например, закон дистрибутивности позволяет переписывать и Поскольку нет способа сделать хороший общий выбор применения или неприменения такого правила перезаписи, такое переписывание выполняется только при явном вызове пользователем. Для дистрибутивности компьютерная функция, которая применяет это правило перезаписи, обычно называется «expand». Обратное правило перезаписи, называемое «factor», требует нетривиального алгоритма, который, таким образом, является ключевой функцией в системах компьютерной алгебры (см. Факторизация полиномов ).
Некоторые фундаментальные математические вопросы возникают, когда кто-то хочет манипулировать математическими выражениями на компьютере. Мы рассматриваем в основном случай многомерных рациональных дробей . Это не является реальным ограничением, поскольку, как только иррациональные функции, появляющиеся в выражении, упрощаются, они обычно рассматриваются как новые неопределенные. Например,
рассматривается как многочлен по и
Существует два понятия равенства для математических выражений . Синтаксическое равенство — это равенство их представления в компьютере. Это легко проверить в программе. Семантическое равенство — это когда два выражения представляют один и тот же математический объект, как в
Из теоремы Ричардсона известно , что может не существовать алгоритма, который решает, являются ли два выражения, представляющие числа, семантически равными, если в выражениях разрешены экспоненты и логарифмы. Соответственно, (семантическое) равенство может быть проверено только на некоторых классах выражений, таких как многочлены и рациональные дроби .
Чтобы проверить равенство двух выражений, вместо разработки специальных алгоритмов обычно приводят выражения к некоторой канонической форме или приводят их разность к нормальной форме и проверяют синтаксическое равенство результата.
В компьютерной алгебре «каноническая форма» и «нормальная форма» не являются синонимами. [15] Каноническая форма такова, что два выражения в канонической форме семантически равны тогда и только тогда, когда они синтаксически равны, в то время как нормальная форма такова, что выражение в нормальной форме семантически равно нулю, только если оно синтаксически равно нулю. Другими словами, ноль имеет уникальное представление в виде выражения в нормальной форме.
Нормальные формы обычно предпочитаются в компьютерной алгебре по нескольким причинам. Во-первых, канонические формы могут быть более затратными для вычисления, чем нормальные формы. Например, чтобы привести многочлен к канонической форме, нужно разложить каждое произведение через дистрибутивность , тогда как в нормальной форме это не обязательно (см. ниже). Во-вторых, может быть так, как в случае выражений, содержащих радикалы, что каноническая форма, если она существует, зависит от некоторых произвольных выборов, и что эти выборы могут быть разными для двух выражений, которые были вычислены независимо. Это может сделать нецелесообразным использование канонической формы.
Ранние системы компьютерной алгебры, такие как ENIAC в Пенсильванском университете , полагались на человеческие компьютеры или программистов, которые перепрограммировали его между вычислениями, манипулировали его многочисленными физическими модулями (или панелями) и загружали его в считыватель карт IBM. [16] Женщины-математики управляли большинством вычислений, программирующих ENIAC под руководством человека: Джин Дженнингс , Марлин Вескофф , Рут Лихтерман , Бетти Снайдер , Фрэнсис Билас и Кей МакНалти возглавляли эти усилия. [17]
В 1960 году Джон Маккарти исследовал расширение примитивных рекурсивных функций для вычисления символических выражений с помощью языка программирования Lisp , работая в Массачусетском технологическом институте . [18] Хотя его серия работ «Рекурсивные функции символических выражений и их вычисление машиной» осталась незавершённой, [19] Маккарти и его вклад в программирование искусственного интеллекта и компьютерную алгебру с помощью Lisp помогли основать проект MAC в Массачусетском технологическом институте и организацию, которая позже стала Стэнфордской лабораторией искусственного интеллекта (SAIL) в Стэнфордском университете , конкуренция с которой способствовала значительному развитию компьютерной алгебры в конце 20-го века.
Ранние попытки символьных вычислений в 1960-х и 1970-х годах столкнулись с проблемами, связанными с неэффективностью давно известных алгоритмов при переносе их в системы компьютерной алгебры. [20] Предшественники проекта MAC, такие как ALTRAN , стремились преодолеть алгоритмические ограничения за счет усовершенствований в аппаратном обеспечении и интерпретаторах, в то время как более поздние усилия были направлены на оптимизацию программного обеспечения. [21]
Большая часть работы исследователей в этой области состояла в пересмотре классической алгебры для повышения ее эффективности при разработке эффективных алгоритмов для использования в компьютерной алгебре. Примером такого типа работы является вычисление наибольших общих делителей полиномов , задача, необходимая для упрощения дробей и существенный компонент компьютерной алгебры. Классические алгоритмы для этого вычисления, такие как алгоритм Евклида , оказались неэффективными над бесконечными полями; алгоритмы из линейной алгебры столкнулись с похожими трудностями. [22] Таким образом, исследователи обратились к открытию методов сведения полиномов (например, над кольцом целых чисел или уникальной областью факторизации ) к варианту, эффективно вычисляемому с помощью алгоритма Евклида.
Для подробного определения предмета:
Для учебников, посвященных предмету: