Все знают Wolfram|Alpha, и наверняка слышали о Wolfram Mathematica. К сожалению, поиск показал отсутствие постов об этой замечательной среде на хабре, и данной статьей хотелось бы открыть серию публикаций посвященных программированию на Mathematica. Для начала стоит сказать о возможностях и особенностях этой системы, которых ой как много, так что запаситесь терпением. Если хабражителей заинтересует этот математический пакет, то обязательно последуют другие статьи, более конкретные, обучающие работе со средой и внутренним языком.

Основа Mathematica — гибкий символьный язык, поддерживающий множество парадигм программирования, продвинутые инструменты отладки, автоматическое проектирование интерфейса и многое другое. Он упрощает весь процесс разработки от дизайна до внеднения. Mathematica всё — данные, программы, формулы, графики, документы — представляет в виде символьных выражений.


Поскольку описывается математическая среда, в первую очередь надо рассказать о ее вычислительных способностях и диапазоне решаемых задач: Mathematica содержит наибольшую в мире коллекцию высокооптимизированных алгоритмов, заключенных в одной системе, многие из которых были открыты при Wolfram Research. Сочетание эффективности JIT (компиляции на лету) и автоматически конфигурируемых параллельных вычислений, гарантирует корректность ответов и высокую скорость их получения. Система поддерживает числа любой точности, причем для внутренних расчетов часто используются еще более точные значения для повышения качества результата. Также, для повышения точности ��реда использует символьные вычисления, т.е. пытается упростить или преобразовать выражение и лишь затем производит численный расчет. При этом алгоритм решения выбирается автоматически из тысяч методов и может быть изменен даже в процессе вычисления, что ускоряет получение решения и повышает точность больше, чем ручное задание метода (что, однако, не запрещено).


Все математические возможности заключены в небольшом наборе мощных функций, предоставляющих возможность решения алгебраических, дифференциальных, реккурентных и функциональных равенств и неравенств, а также линейных систем; возможность проводить дифференциальный и интегральный анализы, анализ рядов и анализ Фурье, кластерный анализ, интегральные преобразования и многое другое. А также: символьные матрицы, матрицы с числами любой точности, плотные, разреженные, матрицы с миллионами элементов, различные численные методы для нахождения корней и систем алгебраических уравнений. Mathematica предоставляет всеобъемлющую систему для дискретных вычислений, включает в себя все аспекты полиномиальной алгебры, такие, как разложение на множители и декомпозицию, структурные операции, деление многочленов и т.д. Среда позволяет создавать, отображать и управлять кривыми Безье, B-сплайнами, NURBS кривыми и поверхностями в любом числе измерений. Интерполирование данных сплайнами позволяет применять сплайновые методы в любой области.


Взятие простых и многомерных интегралов, а также сумм и произведений их последовательностей; поддерживается большое число методов численного интегрирования. По слухам, Mathematica берет 99% всех известных интегралов и является лидером в данной области. К сожалению, сейчас найти такую информацию на сайте не удалось, но еще ни разу она меня в этой области не подводила.


Mathematica поддерживает широкий набор основных операций и алгоритмов на графах, например: нахождение путей, циклов, клик и прочие. Можно задавать произвольные графы, генерировать случайные, интерактивно конструировать их, а также экспортировать и импортировать в стандартный формат графов и матричный вид. Про такие простые вещи как разложение на множители, простые числа, сравнительную и модульную арифметику можно даже и не упоминать. Доступны математические константы любой точности, а миллионы знаков таких констант как π или e вычисляются в одно мгновение.


Статистики тоже найдут Mathematica полезной, т.к. она включает в себя большее число статистических распределений, чем в любой другой системе, и предлагает полный набор статистических мер и операций (от математического ожидания и дисперсии до полувариантов и энтропии информации), автоматическую оценку параметров и проверку гипотез, анализ статистических моделей и многое другое.


Мало того, что Mathematica является мощной вычислительной средой, в нее встроен дополнительный функционал, затрагивающий многие технические сферы деятельности, от вычислительной биологии и финансового инжинеринга до волнового анализа и геоинформационных систем.


Mathematica поддерживает сотни форматов для импорта и экспорта, включая электронные таблицы, xml, двумерные и трехмерные графические форматы, мультимедиа-файлы, документы, включая pdf и html, а также архивы и многие другие специфические форматы данных. Изначально поддерживаются все стандартные растровые, векторные и видео форматы, включая gif, jpeg, png, svg, eps, avi, flv, quicktime, swf и прочие. Можно импортировать как видеофайлы целиком, так и выделять отдельные кадры для дальнейшей обработки. А для работы с изображениями в Mathematica встроено множество функций служащих для их получения, применения различных фильтров, сегментации, анализа форм, выделения контуров и т.д., работающих в реальном времени.


На многоядерной системе среда автоматически запускает несколько частей расчета одновременно (несколько кривят душой, все же надо немного повозиться). Подсистема параллельных вычислений может масштабироваться для сетевых вычислений, grid-систем, облачных вычислений, а символьный язык предоставляет поддержку множества моделей разделения данных. Система также позволяет программировать GPU: встроена поддержка CUDA и OpenCL. Все GPU-операции полностью интегрированы в среду, включая обмен данными между процессами, автоматическую компиляцию и линковку GPU-кода.


Mathematica содержит полный набор функций для отображения структурированных и неструктурированных данных в 2d и 3d. Встроены функции для вывода графиков контурных и плотности, графиков из точек, линий и поверхностей, векторных графиков и графиков линий тока, гистограмм, двумерных и трехмерных секторных и столбчатых диаграмм, пузырьковых диаграмм, графиков для специализированных областей (таких как финансы и статистика, теория графов, управляющие системы и т.д.: график «японские свечи», Q-Q-нормальный вероятностный график (quantile plot), «ящик с усами» (box-and-whiskers plot), ЛАФЧХ (Bode plot) и многие другие).


Графическая подсистема обеспечивает высококачественное статическое или динамическое представление функций, данных, диаграмм, изображений или аннотаций автоматически определяя баланс между скоростью вычислений и визуальным соответствием. Графические функции способны самостоятельно выбирать области печати и разбиение на регионы. Mathematica предоставляет сотни опций позволяющих контролировать каждый аспект отображения, включая размер рисунка, метки осей, отображение сетки, разбиение, заливку, 3d-освещение, угол наклона камеры и многое другое, позволяя создавать профессионально выглядящие графики. Более того, 3d-графики являются интерактивными, позволяющими изменять параметры камеры в реальном времени.


Отдельно стоит сказать и про разработку, которая много облегчается с автоматическим конструированием интерфейсов, символьным заданием элементов управления, единым интерфейсом ввода, отладкой и профилированием с возможностью ставить различные типы точек останова, следить за выражениями во время выполнения кода, визуальным пошаговым контролем выполнения программ и многим другим. Mathematica предоставляет мощный редактор исходного кода с подсветкой синтаксиса, отчетами об ошибках, довводом команд, автоматическим форматированием, отступами и т.д. Интеграция с многоязыковой IDE Wolfram Workbench (на базе Eclipse) дает доступ к различным инструментам, повышающим эффективность разработки, например: управлению файлами проекта, развитым инструментам для работы с исходным кодом, отладке и анализу синтаксиса.


Mathematica включает в себя полный набор элементов интерфейса и управления: кнопки, ползунки, вкладки, чекбоксы, всплывающие меню, диалоговые окна, панели инструментов, а также предоставляет возможность создавать свои собственные элементы. Система рендерит элементы управления в естественном виде для каждой платформы, позволяя сводобно делиться графическими приложениями без необходимости задумываться, в какой ОС они будут работать. Элементы пользовательского интерфейса могут содержать и отображать любое выражение Mathematica.


Система позволяет создавать пакеты – платформонезависимые библиотеки кода, позволяющие многократно его использовать и легко распространять с полным набором документации и вспомогательными панелями инструментов. К Mathematica легко подключить внешние контроллеры или устройства ввода: она автоматически распознает и позволяет конфигурировать геймпады, джойстики, тактильные устройства, 3d-мыши и прочие HID-устройства на любой платформе.


Работа со средой, главным образом, происходит в так называемых «ноутбуках» (notebook, *.nb), которые могут содержать форматированный текст, графику, интерактивные приложения, код и данные, а также могут быть использованы для распространения в виде отчета или презентации. Ввод формул очень прост и в то же время чрезвычайно мощен. В системе присутствуют все типовые возможности высококачественной системы обработки текста, а лежащая в основе документа символьная структура предоставляет гибкие возможности задания разметки и использования стилей (cascading stylesheets): более 1000 опций форматирования и оформления доступны как из меню, так и программно.


Mathematica подключается к любой стандартной SQL-СУБД, предоставляя высокоуровневое символьное представление БД, запросов и результатов наравне с полной поддержкой традиционных строковых SQL-запросов; может вызывать подпрограммы и быть вызвана из программ на C, .NET, Java и других языках; автоматически генерировать код на C для использования в отдельных проектах или для компилирования в библиотеки или исполняемые файлы; подключать динамические библиотеки во время выполнения; подключаться к WSDL-веб сервисам. Все это обеспечивает простое внедрение в существующую инфраструктуру. webMathematica развертывает высокоэффективные приложения Mathematica в виде интерактивных вебсайтов, которые используют современные веб-стандарты и сервисы для добавления динамического содержимого и проведения вычислений через веб. С помощью gridMathematica, приложения можно запускать в параллельном режиме в кластере с автоматической координацией и управлением процессами. Поддерживается программное создание отчетов во множестве форматов, включая PDF, электронные таблицы, HTML и RTF.


Благодаря мощной функции Manipulate можно создавать интерактивные мини-приложения, которые можно будет просмотреть и запустить на любой системе с помощью бесплатного Mathematica Player. Среди особенностей 8 версии пакета, можно выделить прямой доступ к данным Wolfram|Alpha и свободную форму лингвистического ввода. Можно ввести формулу простым человеческим языком, что может быть полезно для новичков.


Как видно из вышеописанного, система является кроссплатформенной и выпущена для windows, mac os, linux и даже sun solaris 10, как 32-битных версий, так и 64-битных. (системные требования и точный список поддерживаемых ОС). И, конечно, в такой мощной системе не обойтись без документации. Mathematica не подкачала и здесь: справка состоит из интерактивных ноутбуков, содержащих более чем 100 000 примеров. Все примеры могут быть запущены или изменены прямо в документации (не бойтесь, изменения не сохраняться), позволяя легко изучать новый функционал.


Заключение

При подготовке, были использованы материалы из раздела features официального сайта, документации и личный многолетний опыт работы со средой. Дополнительную информацию можно найти в обозначенном выше разделе, информацию о способах применения системы в разделе решений, а также можно посмотреть рассказы пользователей. Pro-версия стоит немало, однако есть значительные скидки для студентов, учебных заведений и домашнего использования. Доступна и триальная версия на 15 дней использования. [А еще можно скачать вы сами знаете где].
Надеюсь, мне удалось Вас заинтересовать, и хабр увидит еще множество статей о Wolfram Mathematica.

UPD: vayun упомянул об одной из самых интересных штук для ознакомления — о Wolfram Demonstrations Project, на котором можно посмотреть множество мини-программ, сделанных с использованием Manipulate. У всех программ есть онлайн предпросмотр, и возможность скачать демо-проект (запустить можно бесплатным Mathematica Player'ом) и исходники.