Wolfram Mathematica: знакомство

Все знают 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'ом) и исходники.
Поделиться публикацией

Комментарии 60

    +11
    Mathematica — просто фантастическая система. Чтоб она еще стоила разумных денег, пусть хотя бы в каком-нибудь «лайт» варианте — цены б ей не было.
      0
      Смотря для каких целей, студентам, например, не так и много — всего $139 за все время обучения. Думаю, студенты старших курсов могут купить и самостоятельно. Для домашнего использования в районе $300.
        +11
        угу, только не в России. Да и 300$ — не самые маленькие деньги
          +6
          Ну трындец, жаловаться на 300$ для специализированной системы, которая еще и один из лидеров в данной области!
          Опять же, если ее собираются использовать, то уровень задач определенно будет превышать калькуляцию домашнего бюджета.
          По моему, подобные заявления это элементарное жлобство махрового халявщика.

            +6
            Для танкистов: в России нельзя купить Математику за 300 долларов.
              0
              Для chainikов: я это утверждал?
                0
                А за сколько можно что ж не уточняете?
                  0
                  Яндекс в помощь.
                  Не знаю как 8 версия, семерка стоила что-то около 60 тысяч.
                    +2
                    Стоимость индивидуальной лицензии и лицензии исследователя (требуется подтверждение вашего университета). Обратите внимание на страну, на включение в стоимость премиум-сервиса (подписка на 1 год; позволяет бесплатно обновляться до новой версии) и дополнительную бесплатную home-лицензию. Немало просят, да )
                    Но тут надо понять, зачем она Вам. При бизнес- или исследовательских целях, цена мне кажется весьма адекватной: либо уже есть капитал, либо есть гранты, либо есть выгода от применения системы (иначе зачем ее применять, как не для получения прибыли). А для домашнего или студенческого использования и цены другие.
                    0
                    а в чём проблема купить Математику в России за 300 долларов?
                    я покупал своему научному руководителю, там правда не студенческая лицензия, а для профессуры и стоит 700 баксов, но купили без проблемм. В качестве аппрува дали ссылку на инфу о нём на сайте универа.
                    По сути для студента — просто отправляешь скан студенческого и всё.
                    На вопрос «нормально, если подтверждающая информация приведена на русском?» мне ответили «да, всё хорошо — у меня есть софт, который всё переведёт»
                    кста, бонусом дали ещё домашнюю лицензию на год
              +1
              В качестве бесплатной альтернативы можно попробовать opensource проект — sage. Очень интересная система, да к тому же работает чрез браузер.
                +1
                Это даже не альтернатива, настолько велика разница в уровне. Из всех бесплатных систем компьютерной алгебры разве что GAP приблизился к уровню Mathematica и Maple, да и то весьма условно.
                А учитывая уровень документации, то и вовсе говорить не о чем.
                  0
                  Я для домашних нужд использовал Maxima.
                  Не ровня Maple и Mathematica, конечно, но на мои нужды вполне хватало.

                  В те времена когда учился, у универа была лицензия на Mathematica, два семестра проходили ее, работы всякие лабораторные выполняли. После нее почти любой подобный математический софт осваивается на автомате.
              +1
              спасибо, однозначно в избранное…
              жду еще статей по Wolfram Mathematica
                +7
                Была задумка выпускать каждую неделю по статье (имею в том свой тайный корыстный интерес). Так что будем стараться.
                  0
                  только отформатируйте текст, пожалуйста… там текст, который после картинки, там переход на новую строку сделайте, а то не очень удобно читать
                    +3
                    Спасибо, учтем и… сделано!
                +2
                Два года ждал этот тред!
                Спасибо, ещё бы почитать про применение в различных областях бы!
                  0
                  К сожалению встретился с проблемой, что студенческую версию нельзя поставить на свой компьютер в университете. Даже если кроме тебя компьютером никто вообще не пользуется.
                    0
                    Было бы интересно узнать про Ваш опыт. Как и где покупали, с кем переписывались по поводу этих проблем?
                      0
                      Да ничего особенного. Написал в службу продажи на сайте. Мне перезвонили на след. день. Объяснил, что я — Phd student, что у меня есть своё место и свой компьютер. И можно ли мне туда поставить студенческую версию математики на срок моего обучения. Сказали что нельзя. Студенческую версию — только на личный домашний компьютер+ноутбук.

                      Я, к слову, потом нашел лицензию на 6-ю версию на этот компьютер. Вот ей и пользуюсь сейчас.

                      Точнее дома правлю программу на 7-ке, которая мне кажется гораздо удобнее, а запускаю на счёт в университете.
                        0
                        Э… А зачем вы у них вообще это спрашивали?
                    –2
                    Я тут полез в вики после вашей статьи :) Вы самое интересное не сказали — окзывается система называется «Вольфрам» не потому что слово красивое или создатели — химики, а просто это фамилия основателя системы(компании-разработчика) О_о
                      +1
                      Я связывал Mathematica c C# (.NetLink). Но у меня не получилось сохранять возвращаемый результат (формулы) в виде, удобном для печати (хотелось бы LaTeX). Грубо говоря есть IKernelLink методы EvaluateToInputForm и EvaluateToOutputForm. Но нет метода который бы переводил в TeXForm. С таким никто не стыкался?
                        0
                        К сожалению, я работал только с JLink'ом, не могу дать точный совет. Но, быть может, получится такой костыль: вызвать функцию в Mathematica, которой передать выражение, которое преобразуется с помощью TeXForm и возвращается обратно приложению?
                          0
                          Ох ты ж! Два моих любимых средства программирования оказывается можно связать?
                          Спасибо! Пойду играться :)

                          Кстати, думаю, про это тоже бы отличная статья могла получиться.
                          +1
                          Будучи горячим поклонником этой системы, не могу не приветствовать этот пост. Успехов.
                            –1
                            Думаю стоило и еще одну важную вещь упомянуть — то что Mathematica представляет собой машину Маркова, а это значит, что можно производить арифметические операции с любой необходимой точностью!
                              0
                              Боюсь, Вы не очень внимательно читали :)
                                0
                                Верно, абзац с «символьными вычислениями» под вечер не проскочил мимо сознания =)
                              –2
                              Вольфрам хотят очень много денег, есть же бесплатная DBpedia с, в общем-то, довольно близкими возможностями.
                                0
                                Прога категорически хорошая, у нас в универе обучение работы с ней — часть курса по матану. Оптимизация выше всяких похвал, прога спокойно шла на древнем Celeron с 512 мб RAM. Но цена для нищего студента первых курсов, во времена относительного кризиса, большая.
                                  0
                                  прочитал что у математики есть модуль MathLink, позволяющий использовать движок математики в своих приложениях. есть ли возможность создавать standalone applications, и как тогда будут обстоять дела с лицензиями?
                                  0
                                  Как вовремя! Буквально месяц назад установил попробовать и… Не смог разобраться с-напрыгу, но вижу. что что-то очень можное и очень хочется уметь.
                                  Цикл с татей в стиле «от простого к сложному» будет очень полезен. Спасибо!
                                    0
                                    Да уж, на первый взгляд действительно выглядит пугающе, но за пару вечеров вполне можно разобрать основы, а дальше втягиваешься и начинаешь получать удовольствие :-)
                                    +1
                                    Когда-то давно (как раз для матана, линала и т.д.) использовал эту софтину — считает действительно круто, в свое время мне очень помогла.
                                    Но, в конечном итоге, перешел на Maple. Во-первых, для универа этого хватало с головой, а, во-вторых, в математике мне не нравился набор формул. Может быть, это звучит и тупо, но, когда у тебя четырехэтажные дроби, записанные одной строкой, смотрелось это… ну, как минимум, неудобно — сложно искать ошибки. Конечно, там была юзер-френдли система набора, но сделана была насколько через жопу, ну проще и быстрее было набирать в строчку.
                                    Да, а еще можно было из ворда копировать формулы и сразу вставлять в maple, который тут же все считает (без модификации скопированных формул). Когда делаешь большой курсач — это очень удобно.

                                    И, все же, с удовольствием бы почитал статьи на эту тему — когда-то эта программа перевернула мое представление о математике :)
                                      0
                                      Там есть функция, которая преобразует формулу записанную с помощью функций в символьный вид.
                                        +2
                                        Если просто запустить ячейку с четырехсложной дробью, записанной в виде одной строки, то на выходе получим красиво выглядящую формулу. Которую потом можно скопировать (Copy As -> MathML expression) и вставить в ворд. Как минимум 2007 это понимает.

                                        image

                                        Что касается изначального ввода формул, то Вы, видимо, пользовались палитрами, что, конечно, долго и неудобно. В одном из уроков будет о вводе формул «горячими» клавишами, — увидите, что это легко, быстро и просто.
                                          0
                                          Почему-то некоторые формулы при копировании через MathML в MathType не вставляются
                                          image
                                            0
                                            Да-да, об этом я и говорю. Собственно, так я делал в maple, а mathematica (той версии, которую я использовал) не могла. Но сейчас это выглядит убедительно :)

                                            Что касается набора формул, то, насколько я помню, горячие клавиши были жутко нелогичные, а описание их лежало глубоко в документации.
                                            Т.е., есть в maple я нажал "^", сразу получил степень, нажал "/", сразу получил дробь и т.д., то в математике нужно было нажимать что-то типа «ctrl+9» (пример из головы), что вообще не имело никакого смысла.

                                            Как я уже сказал, с удовольствием посмотрю, как сейчас обстоят дела.
                                              0
                                              Да, и еще хотел спросить: а есть в математике что-то похожее на Simylink Matlab'а?
                                                +1
                                                Насколько мне известно, встроенного нет. Если только сторонние решения, например, MathModelica, которая к матеке подключается.
                                                А вообще, зачем это нужно, разве такая схема понятнее формул или иного представления? В принципе, для динамического моделирования, в Mathematica есть функция Manipulate. Но да, это не то же самое, что мышкой накидать компонентов и связать между собой, — тут визуальную часть надо самому накидать.
                                                  0
                                                  Если проектировать систему в сферическом вакууме, то формулы понятнее.
                                                  Если смоделировать работу какого-то устройства — я считаю, что схема будет понятнее.

                                                  И потом, в универе любят simulink'овские схемы.
                                                    0
                                                    Не буду спорить. Прикол в том, что приведенная в прошлом комменте жуткая схема моделирует это (насколько я понял при крайне беглом прочтении статьи). Не сказал бы, что схема информативнее рисунка.
                                                      0
                                                      Хе-хе.
                                                      Да уж :)
                                            0
                                            Автор — молодец! Отличная обзорная статья. Реквестирую цикл статей по Mathematica, это точно будет полезным.

                                            Также реквестирую отдельный блог Mathematica
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                0
                                                Мне было бы интересно почитать о таком опыте работы с математикой.
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    0
                                                    Хабраэффект или Хабрасторадж вам в помощь.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                +1
                                                Сайт с примерами использования в различных областях «народного хозяйства»
                                                demonstrations.wolfram.com/ (рекомендуется к ознакомлению)
                                                  0
                                                  Один из немногих программных продуктов, который я ненавижу. Откат только на одно действие, неудобная отладка, вылетает каждые 10 минут (версия 7.0.1). Как вспомню, так пот выступает.
                                                    0
                                                    спасибо за познавательный пост.
                                                    хотелось бы также видеть статью про отличия Mathematica от конкурентов
                                                    и есть ли у неё вообще конкуренты?

                                                    слышал, например, про Maple и Matlab
                                                    это конкуренты? или они просто в некоторых (значительных/незначительных) вещах пересекаются?
                                                      0
                                                      Про мэпл не скажу, с виду довольно похоже на математику.

                                                      Матлаб и математика — совершенно разные вещи. Матлаб — числодробилка, математика — в основном для символьных вычислений. В теории они могут выполнять функции друг друга, но и молотком можно гвозди забивать, сами понимаете.
                                                        0
                                                        Намеренно не стал и не буду рассказывать об отличиях, т.к. не знаком с другими пакетами (кроме беглого с матлабом), а рассуждать и выдумывать не хочу.
                                                        0
                                                        Автокомплит в редакторе Mathematica не работает
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                            0
                                                            Если необходимо просто читать значения ячеек из xls (xlsx) файла или писать в него, то математика делает это и без Link for Excel, см. документацию по функциям Import/Export. Я правильно понял ваш вопрос?

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое