Просмотр содержимого документа
«Реферат на тему "Система Axiom и ее возможности для символьных вычислений"»
1 Введение
1.1 Что такое «Axiom»
«Аксиома» (Axiom) — свободная универсальная система компьютерной алгебры. Она состоит из среды интерпретатора, компилятора и библиотеки, описывающей строгую, математически правильную иерархию типов.
Разработка «Axiom» ведётся с 1971 года. В то время она называлась «Черновик» (Scratchpad) и была большим проектом универсальной системы компьютерной алгебры, созданным в «Межделмаше» (IBM) под руководством Ричарда Дженкса (Richard Jenks). На протяжении 20 лет проект «Axiom», руководимый Барри Тагером (Barry Tager), был инструментом серьёзных исследований в вычислительной математике. В 1990-е, когда удача отвернулась от IBM, проект был продан компании «Числовые алгоритмы» (Numerical Algorithms Group) и, став коммерческим продуктом, получил своё нынешнее имя. По разным причинам «Axiom» продавалась не очень хорошо и в октябре 2001 года покинула рынок программного обеспечения. В сентябре 2002 года «Axiom» была выпущена под свободной лицензией БСД,2) а 27-го августа 2003 года стала доступна для загрузки с сайта Фонда свободного программного обеспечения — «Саванна» В 2007 году на основе «Axiom» были созданы ещё два проекта: «Фрикас» и «Открытая Аксиома». В настоящее время «Axiom» доступна и может быть использована на многих системах типа Unix, в том числе Linux, а также Windows.
Одной из причин коммерческого провала «Axiom» можно считать
(а можно и не считать) саму её суть: она многое делает не так, как большинство программ. В основе «Axiom» лежит строгая математика, и это — её приоритет над красивой внешностью или удобством использования. Однако удобство использования — понятие субъективное, и для подготовленного специалиста «Axiom» — настоящий подарок и удовольствие.
«Axiom» не только интерактивная программа с построчным вводом, она также — компилятор полноценного языка, с помощью которого можно строить и исследовать математические конструкции. Фактически, такие построения составляют суть развития «Axiom» как программы. Неполный список включает: понятия группы и кольца, арифметику произвольной точности, комплексные и гиперкомплексные числа, матрицы, ряды, пределы, производные, интегралы, дифуры, а также их комбинации вроде матриц, рядов из матриц и многое другое.
Решающая сила «Axiom» кроется в её великолепной структуре, которая позволяет наращивать новые возможности, не увеличивая общую сложность системы. Дизайн «Axiom» позволяет интегрировать её с другими инструментами типа численных библиотек на Фортране или Си. «Axiom» — литературная программа, технология литературного программирования Дональда Кнута используется по всему исходному коду, что позволяет «Axiom» иметь актуальную документацию и быть понятной новым разработчикам.
В настоящее время не существует конкурента «Axiom» на её поле и, что особенно важно, в плане структуры и организации проекта. «Axiom» предлагает основу для математических изысканий любой сложности и новизны. Она предоставляет язык для компьютерного описания математических объектов и их отношений.
Хотя «Axiom» уже сейчас представляет собой мощную систему, перспектива использования её для создания новых разделов математики поистине завораживает. В последние годы «Axiom» была использована для успешного решения задач теоретической математики, математическойфизики, комбинаторики, обработки сигналов и параллельных вычислений. С её помощью были получены новые диофантовы приближения для числа 𝜋; подтверждена гипотеза Гротендика для некоторых классов линейных дифференциальных уравнений; были изучены арифметические свойства униформизации гиперэллиптических кривых; были построены новые алгоритмы факторизации чисел на основе теории групп; с помощью «Axiom» были получены некоторые результаты в квантовой теории поля.
Появление «Axiom» в научном мире вывело символьные вычисления на новый уровень, на котором учёные могут формулировать свои мысли и решать задачи с помощью компьютера.
2 Начало работы
2.1 Ввод и вывод
Интерактивная среда «Axiom» запускается в терминале командой axiom.
Чтобы выйти из «Axiom», надо набрать команду quit (со скобочкой) и нажать клавишу Enter. Всё это написано в приветствии, выводимом программой при запуске (пример 1).
В интерактивном режиме команды вводятся в одну строку, нажатие клавиши Enter приводит к выполнению команды и выводу результата. Несколько команд можно ввести в одной строке, разделяя их символом «точка с запятой» (;), при этом выводится только результат последней. Длинную строку можно разбить на несколько, заканчивая каждую символом подчёркивания (_) и нажимая Enter.
Для ссылки на предыдущие результаты вычислений используются символы: % — самый последний; %% n — результат номер n, который лучше заключать в скобки; %% (-n) — результат номер n с конца, так что %%(-1) ≡ %
(пример 2).
«Axiom» по умолчанию выводит результаты в виде, похожем на «человеческую» запись. Можно попросить её заодно выводить результаты в формате TEX, в формате языка Фортран, MathML и др. (пример 3).
Можно запустить интерактивную сессию в программе TEXMACS. Проще всего это сделать с оригинальной «Axiom», и хотя TEXMACS —достаточно тяжёлая, требовательная к ресурсам программа, результат прекрасен.
3 Простые примеры
3.1 Арифметика
«Axiom» способна работать с вещественными числами очень большой точности (пример 6).
Однако следует понимать, что такие числа при любой точности всё же приближённы. Если нужен числовой результат, следует до самого конца проводить символьные вычисления и лишь затем превращать результат в вещественное число. Точность задаётся функцией digits (изначально — 20). Для представления результата в числовой (десятичной) форме используется функция numeric, для перевода в любую другую систему исчисления — radix. Возведение в степень обозначается символом ** либо ^.2)
В «Axiom» легко реализуется модульная арифметика (пример 7).
Например, расчёт времени дня (часы) использует арифметику по модулю 12 или 24. Так что 22+3 = 1. Арифметика по модулю 360 используется для отсчёта углов.
3.2 Переменные, макросы и функции
3.2.1 Переменные и макросы
Громоздкие выражения в математике принято обозначать отдельными новыми переменными, это позволяет также видеть более крупномасштабную структуру выражений. Например, дискриминант квадратного уравнений
𝒟 =√𝑏2 − 4𝑎𝑐. То же самое можно делать и в «Axiom» с помощью символа «:=» вот так — d:=sqrt(b**2-4*a*c). Теперь везде, где появится переменная d, вместо неё будет подставлено выражение sqrt(b**2-4*a*c).
Ещё пример int := integrate — и можно писать интегралы короче.
Использование переменных имеет и «обратную силу», например, можно менять элементы матрицы, обращаясь к ней по имени переменной. Более общий случай подстановок реализуется с помощью макросов — подстановок с параметрами, но они уже обратной силы не имеют, так как означают буквальную подстановку (пример 8).
3.2.2 Функции
Функции принципиально отличаются от макросов и являются одним из основных понятий «Axiom» и т. н. функциональных языков программирования.
1) Функция — это последовательность действий (операций).
Функция задаётся конструкцией:
имя (аргументы) == тело функции.
Результат функции — результат последней операции в её теле.
Функции могут иметь одинаковые имена, а смысл функции (последовательность операций) определяется типом и количеством переданных ей параметров. Например, и для решения алгебраических уравнений, и для решения дифференциальных уравнений, и для решения их систем используется функция solve (см. далее).
Чтобы узнать, для каких типов объектов применима та или иная функция, служит команда displayoperations . Чтобы узнать, какие функции применимы к тому или иному типу объектов, служит команда show . Эта команда также показыват сокращённые названия типов, например, INT для Integer, POLY для Polynomial.
Тип объекта можно уточнить либо при его объявлении (через одно двоеточие), либо при использовании (через два двоеточия). Если тип не указан, подразумевается самый простой, очевидный вариант (пример 9).
Характерной особенностью использования функций являются «ленивость вычислений», суть которой в том, что действия (операции) не производятся до тех пор, пока не понадобится их результат. Это позволяет, например, оперировать бесконечными последовательностями, рядами, делить на нуль и т. п.
Функция p(n) принимает в качестве аргумента символ n, а как результат возвращает выражение. При этом она выполняет некоторые действия (операции)над символом n, и если для какого-то типа n (например, матрицы) эти операции не определены, «Axiom» сообщит об ошибке. Кроме этого, если был указан тип функции, попытка использовать её не по назначению будет отвергнута. Чтобы превратить какое-либо выражение (например, результат длинных вычислений) в новую функцию, надо использовать функцию function (пример 11).
3.2.3 Операторы
Операции (действия) с математическими объектами также являются математическими объектами. Абстракные операции (которые «что-то» делают) создаются функцией operator с аргументом, означающим имя оператора, которое будет использоваться для обозначения этого оператора (пример13)
Наиболее частое использование операторов — дифференциальные уравнения. Имя оператора никак не связано с именами переменных, и чтобы не водить «Axiom» в заблуждение, часто имя оператора «экранируют» с помощью символа ’(апостроф); можно просто заключать его в кавычки, если так привычнее.
3.3 Производные
Производные выводятся с помощью функции differentiate. Для краткости можно использовать лишь букву D (заглавную).
3.4 Последовательности Последовательности, в том числе бесконечные, создаются конструкцией
[f(n) for n in a] . Для применения некоторой функции ко всем членам последовательности используется функция map. В примере 15 показано табулирование функции на заданном отрезке с заданным шагом. Для свёртки конечной последовательности с помощью некоторой операции (сложение, умножение, разность, минимум, максимум) используется функция reduce, суммы задаются функцией sum (пример 16)
3.5 Матрицы
Матрицы создаются функцией matrix, диагональные матрицы можно создать проще — функцией diagonalMatrix. Ранг матрицы вычисляется функцией rank, определитель — determinant, обратная матрица — inverse (или возвести в степень −1), транспонированная — transpose, след матрицы — trace. Доступ к элементам матрицы — матрица (строка, столбец) . Разумеется, матрицы можно складывать, умножать друг на друга и на скаляр, возводить в целую степень. Все возможные операции над матрицами покажет команда show Matrix. Следует помнить, что «Axiom» работает по вполне определённым правилам и лишена творческого начала, поэтому функция rank не замечает, что sin х/tg х = cos х (пример 18).
3.6 Векторы
Векторы создаются функцией vector. Вектор имеет фиксированное число элементов (в отличие от списка или массива) любого, но только одного типа. Если для элементов массива определены операции сложения, вычитания, умножения на скаляр, то они определены и для вектора. Число элементов вектора можно узнать, добавив к нему символ #. Доступ к элементам вектора — вектор (номер). Векторы можно умножать на матрицы. Скалярное произведение векторов — dot, векторное — cross. Полный список операций с векторами, как обычно, можно узнать по команде showVector (пример 19).
3.10 Интегралы Неопределённые и определённые интегралы берутся с помощью функции integrate.
Неопределённые интегралы (первообразные)
Интегралы от элементарных функций часто не выражаются через элементарные же функции. В таких случаях «Axiom» выводит формальный интеграл, но только лишь если может доказать его «неэлементарность»; иначе она сообщает об ошибке.
Если вид ответа зависит от знаков выражений, входящих в исходное выражение, например, интеграл ниже, то функция integrate покажет все возможные варианты (пример 26). Функция complexIntegrate этим не заморачивается, считая все переменные и функции комплексными.
Определённые интегралы
«Axiom» проверяет, определена ли функция на указанном интервале. Если это не так, она выводит сообщение об ошибке. Для несобственных интегралов (в том числе и для «потенциально» несобственных в силу наличия параметров) «Axiom» пишет слово potentialPole и отказывается вычислять интеграл, если её не успокоить , (пример 27).