В 80-х годах прошлого столетия возможностями символьной математики увлекся защитивший докторскую диссертацию Стивен Вольфрам (Stephen Wolfram) из США. Его интересы были столь серьезны, что он основал фирму Wolfram Research, Inc., приступившую к созданию математической системы.
Цели нового проекта были достаточно амбициозными - разработка мощного и универсального ядра системы (Kernel), способного работать на различных компьютерных платформах; создание многофункционального языка программирования, ориентированного на математические приложения; подготовка современного пользовательского интерфейса и обширного набора прикладных пакетов и расширений системы (Packages).
Результатом работы Wolfram Research стала одна из самых мощных в мире систем компьютерной алгебры - Mathematica. Впервые она увидела свет чуть более двадцати лет назад - в 1988 году. 18 ноября 2008 года Wolfram Research выпустила седьмую версию своей системы.
Как и все программное обеспечение подобного рода (Mathcad, Maple и др.), Mathematica обладает множеством функций для аналитических и численных расчетов, позволяет строить двух- и трехмерные графики, а также поддерживает работу с растровой/векторной графикой и даже звуком! К отличительным же чертам программы относится реализация интерфейса типа "Блокнот" ("Notebook"), разделенного на ячейки ("Cells"), позволяющая сочетать в пределах одного документа как математические выражения, так и текстовые комментарии, а также мощный встроенный язык программирования, ориентированный на математические вычисления.
Что же представляет собой Mathematica?
Запустим программу, и на экране слева появится большое белое окно - блокнот. Именно в него вводится информация и в нем отображаются результаты. Окно посередине - заставка-приветствие. Справа могут отображаться панели инструментов.
Переключимся на блокнот и введем следующее выражение (команду):
2+8
Для расчета необходимо нажать "Shift+Enter" (или "Enter" на цифровой клавиатуре). После вычислений на экране можно увидеть исходное выражение и ответ:
In[1]:=2+8
Out[1]=10
Исходное выражение присвоено в качестве значения объекту "In[1]", а результат - объекту "Out[l]". Эти объекты появляются после вычисления, поэтому не следует ожидать "In[2]:=" как приглашения программы к вводу следующего выражения.
Кроме того, можно заметить, что вдоль правого края блокнота появляются квадратные скобки. Исходное выражение и результат заключены в ячейки, которые как раз и ограничены этими квадратными скобками. Каждая такая пара ввода-вывода заключена, в свою очередь, в группирующую скобку, объединяющую и исходное выражение, и результат.
Выделив скобку, ограничивающую какую-либо ячейку и нажав правую кнопку, вызываем контекстное меню и выбираем в нем пункт Style. Здесь можно увидеть стили форматирования ячейки. Нас пока интересует только Input - он предназначен для ввода данных и используется по умолчанию в каждой новой ячейке ввода; и стиль Text - используется для текстовых заметок и комментариев и полностью игнорируется при вычислении.
Что же происходит во время расчета? При выполнении первого расчета запускается ядро системы Mathematica, называемое MathKernel (или "Ядро" для краткости), которое и обеспечивает все вычисления. По сути, Mathematica состоит из двух программ - пользовательского интерфейса (Front End), где вводятся команды и отображаются результаты, графики и текст, и ядра (MathKernel), в котором осуществляются вычисления. После первого запуска на расчет ядро остается в памяти до окончания работы пользовательского интерфейса. При длительной работе, чтобы избежать появления ошибок, рекомендуется периодически "очищать" MathKernel, отключив его (в меню выбрав "Evaluation> Quit Kernel").
Попробуем вычислить неопределенный интеграл функции sin(x). Для этого можно на панели инструментов "Basic Math Assistant" на закладке "Advanced" нажать значок с изображением неопределенного интеграла ∫xdx, после чего ввести функцию Sin[x], чтобы в итоге получилось ∫Sin[x]dx, а можно просто набрать Integrate[Sin[x],x]. Не лишним будет отметить, что для задания аргументов функций используются квадратные скобки [ ], а строчные и прописные буквы различаются, и вместо Sin нельзя ввести sin или SIN.
Для вычисления определенного интеграла необходимо или нажать соответствующую кнопку на панели инструментов, или добавить пределы интегрирования в фигурных скобках:
Для того чтобы Mathematica давала ответ сразу в числовой форме, необходимо использовать вещественный формат числа, характерной особенностью которого является присутствие дробной точки.
Также с использованием фигурных скобок легко построить на одном рисунке графики нескольких функций, например, sin(x) и sin(2x):
Для наилучшего отображения в программе существует более 20 опций, определяющих стили и дополнительные элементы графиков. Например, опция Axes->{True, False} задает отображение только оси абсцисс.
Решить уравнение в системе Mathematica также несложно. Допустим, необходимо найти корни уравнения x3 - 2x +1 = 0. Это легко и просто:
В этом случае ответ дан в формате целых чисел, что иногда затрудняет получение представления о величине результата.
Mathematica - это расширяемая система. Кроме внутренних команд ядра системы Mathematica, можно использовать дополнительные команды, которые содержатся в загружаемых пакетах. Некоторые пакеты системы (по алгебре, анализу и т.д.) поставляются вместе с самой программой и являются стандартными. Другие пакеты можно загрузить с сервера компании Wolfram Research или приобрести отдельно.
Пакеты расширения системы Mathematica (Add-ons) являются наборами файлов с расширением .m, написанными на языке программирования системы и объединенными под именами соответствующих пакетов. Пакеты добавляют в систему ряд функций, которые отсутствуют в ядре системы. Они могут легко модифицироваться и создаваться, что обеспечивает легкую адаптацию системы под конкретные задачи.
Чтобы выполнить команду из пакета Mathematica, надо сначала загрузить нужный пакет с помощью команды <<dir'package' или <<dir\. Последняя команда инициализирует все пакеты из папки dir. Вот как, например, можно инициализировать все алгебраические пакеты: <<Algebra', а подключение пакета <<Units' позволяет преобразовывать единицы измерения различных физических величин.
Все, что было написано ранее, касалось применения системы Mathematica для решения математических задач. Однако это вовсе не означает, что Mathematica не позволяет при необходимости программировать решение простых или сложных задач, для которых имеющихся встроенных функций и даже пакетов расширений оказывается недостаточно или которые требуют для реализации своих алгоритмов применения программных средств, присущих обычным языкам программирования. Все обстоит совсем иначе.
Вот некоторые возможности, предоставляемые в системе Mathematica для написания программ:
- Организация циклов
- Условные выражения и безусловные переходы
- Функции пользователя
- Образцы (patterns) и их применение
- Использование процедур
- Функции FixedPoint и Catch
- Реализация рекурсивных и рекуррентных алгоритмов
- Подготовка пакетов расширений
- Средства визуального программирования
- Отладка и трассировка программ.
Фактически, основой системы Mathematica является проблемно-ориентированный на математические расчеты язык программирования сверхвысокого уровня.
Ниже представлен листинг, написанный на языке программирования системы Mathematica. Думаю, он в комментариях не нуждается.
In[1]:=For [ i = 1, i<=3, Print ["Hello World!"]; i + + ]
Hello World!
Hello World!
Hello World!
Важно подчеркнуть, что здесь речь идет о языке программирования системы Mathematica, а не о языке реализации самой системы. Языком реализации является язык программирования C++, показавший свою высокую эффективность в качестве языка системного программирования.
На сайте разработчика www.wolfram.com доступна ознакомительная 15-дневная версия, правда, для того, чтобы ее скачать, необходимо заполнить форму. Также на сайте можно найти много полезной документации и задать вопрос на студенческом форуме.
Однако, несмотря на уже двадцатилетний возраст системы, мощные вычислительные возможности, а также возможность установки на такие операционные системы, как Windows, Mac OS X, Linux на постсоветском пространстве популярность системы невелика. Многие пользователи считают эту систему слишком сложной, а в функциональном отношении избыточной.
Сергей ПРОНКЕВИЧ,
[email protected]
Горячие темы