Все знают 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 примеров. Все примеры могут быть запущены или изменены прямо в документации (не бойтесь, изменения не сохраняться), позволяя легко изучать новый функционал.
Надеюсь, мне удалось Вас заинтересовать, и хабр увидит еще множество статей о Wolfram Mathematica.
UPD: vayun упомянул об одной из самых интересных штук для ознакомления — о Wolfram Demonstrations Project, на котором можно посмотреть множество мини-программ, сделанных с использованием Manipulate. У всех программ есть онлайн предпросмотр, и возможность скачать демо-проект (запустить можно бесплатным Mathematica Player'ом) и исходники.
Основа 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'ом) и исходники.