Mathematica
Wolfram Mathematica — система компьютерной алгебры, используемая во многих научных, инженерных, математических и компьютерных областях. Изначально система была придумана Стивеном Вольфрамом, в настоящее время разрабатывается компанией Wolfram Research.
Возможности
Аналитические преобразования
- Решение систем полиномиальных и тригонометрических уравнений и неравенств, а также трансцендентных уравнений, сводящихся к ним.
- Решение рекуррентных уравнений.
- Упрощение выражений.
- Нахождение пределов.
- Интегрирование и дифференцирование функций.
- Нахождение конечных и бесконечных сумм и произведений.
- Решение дифференциальных уравнений и уравнений в частных производных.
- Преобразования Фурье и Лапласа, а также Z-преобразование.
- Преобразование функции в ряд Тейлора, операции с рядами Тейлора: сложение, умножение, композиция, получение обратной функции и т. д.
- Вейвлет-анализ.
Численные расчёты
- Вычисление значений функций, в том числе специальных, с произвольной точностью.
- Решение систем уравнений.
- Нахождение пределов.
- Интегрирование и дифференцирование.
- Нахождение сумм и произведений.
- Решение дифференциальных уравнений и уравнений в частных производных.
- Полиномиальная интерполяция функции от произвольного числа аргументов по набору известных значений.
- Преобразования Фурье и Лапласа, а также Z-преобразование.
- Расчёт вероятностей
- Определение простого числа по его порядковому номеру, определение количества простых чисел, не превосходящих данное.
- Дискретное преобразование Фурье
- Разложение числа на простые множители, нахождение НОД и НОК.
- Операции с матрицами: сложение, умножение, нахождение обратной матрицы, умножение на вектор, вычисление экспоненты, получение определителя.
- Поиск собственных значений и собственных векторов.
Графика и звук
- Построение графиков функций, в том числе параметрических кривых и поверхностей.
- Построение геометрических фигур: ломаных, кругов, прямоугольников, и т. д.
- Воспроизведение звука, график которого задаётся аналитической функцией или набором точек.
- Импорт и экспорт графики во многих растровых и векторных форматах, а также звука.
- Построение и манипулирование графами.
Разработка программного обеспечения
- Автоматическое генерирование С-кода и его компоновка.
- Автоматическое преобразование компилируемых программ системы Mathematica в C-код для автономного или интегрированного использования.
- Использование SymbolicC для создания, обработки и оптимизации С-кода.
- Интеграция внешних динамических библиотек
- Поддержка CUDA и OpenCL.
Сферы применения
- Программирование, основанное на алгоритмах.
- Вычисления с использованием данных из реального мира.
- Сверхвысокоуровневый скриптинг.
- Высокопроизводительное программирование.
- Высокоуровневое метапрограммирование.
- Самодокументирующаяся крупномасштабная разработка.
- Быстрая разработка концептов.
- Программирование с акцентом на аналитику и визуализации.
- Работа с интернетом вещей.
- Программирование в обучении.
- Исследования и разработка в программировании.
- Разработка сразу под несколько платформ.
Wolfram Engine
Центральным элементом Mathematica является Wolfram Engine – программная система, которая позволяет реализовывать язык программирования Wolfram Language, использующийся в системе, в различных вычислительных средах, а так же интерфейсы и средства сообщения языка. Система Wolfram Engine является сложной конструкцией из программных компонент, которые могут исполняться как локально, так и в распределённом режиме.
Основные компоненты
- Ядро языка Wolfram Language – программная компонента, которая реализует интерпретатор основной части языка Wolfram Language.
- Конечные точки Wstp подключения – основное соединение между программными компонентами системы Wolfram Engine, а также между тесно связанными внешними системами.
- Инфраструктура импорт/экспорт – инфраструктура для обработки внешних форматов в системе Wolfram Engine.
- Инфраструктура внешних сервисов – инфраструктура для подключения к независимым API и сопутствующим сервисам.
- Блокнотный пользовательский интерфейс – программная компонента для поддержки интерактивных CDF документов, независимо реализованная для каждой настольной или мобильной операционной системы, или для использования в вебе.
- Конечные точки универсального развёртывания – множество компонент для поддержки системы Wolfram Universal Deployment System.
- Инфраструктура подключённых к сети приборов – инфраструктура для локального или распределённого подключения к внешним приборам.
Сопутствующие компоненты
- Wolfram Knowledgebase – распределённая программная компонента, выполняемая в Wolfram Cloud, к которой система Wolfram Engine обращается за информацией.
- Wolfram Launch Manager – программная компонента, открывающая сервис для запуска копий системы Wolfram Engine.
- Wolfram License Manager – система для администрирования использования Wolfram Engine в децентрализованной локальной сети.
- Wolfram Linguistics System – программная компонента, работающая облачно, используемая для распознавания ввода на естественном языке.
- Wolfram Grid Manager – система для администрирования копий системы Wolfram Engine в гетерогенной системе распределённых вычислений.
- WolframID Manager – глобальная система удостоверения подлинности для распределённых сервисов Wolfram.
Интерфейсы
- Блокнотный пользовательский интерфейс.
- Интерактивный CDF интерфейс Wolfram Language.
- Обращения к модулям Wolfram Engine через API.
- Wolfram Symbolic Transfer Protocol (WSTP).
- Интерфейс командной строки.
- Интерфейс функциональных обращений.
- Доступ к Wolfram Engine посредством обращения к встроенным функциям из различных языков программирования.
- Library Link.
- Загрузка библиотек в систему Wolfram Engine.
Язык программирования Wolfram Language
Wolfram Language – сверхвысокоуровневый мультипарадигменный язык программирования, реализованный в системе Mathematica и других программных продуктах компании Wolfram Research.
Основные особенности
- Основанный на знаниях (Knowledge Based – англ.) – Wolfram Language содержит большое количество встроенных алгоритмов и знаний о мире, и это является одной из ключевых его особенностей.
- Интерактивный – код на Wolfram Language может работать в интерактивном режиме в виде REPL диалога между пользователем и системой.
- Высокоуровневый – с учётом следования прицнипу максимальной автоматизации во всём, возможно, Wolfram Language является самым высокоуровневым языком из всех ныне существующих.
- Ориентированный на использование шаблонов – сопоставление шаблонов символьных выражений является одной из ключевых особенностей языка Wolfram Language.
- Ёмкий – большое количество встроенных функций часто позволяет писать более содержательный и, следовательно, более краткий код.
- Рефлексивный – символьный характер Wolfram Language предоставляет ему возможности интроспекции в полной мере.
- Динамически типизированный – в Wolfram Language всё является символьным выражением, и каждое символьное выражение содержит заголовок, автоматически определяющий его поведение.
- Конкатенативный – поскольку Wolfram Language является символьным, программы могут создаваться посредством конкатенации отдельных значащих частей.
- Позволящий создавать предметно-ориентированные языки, и содержит уже встроенные (regex, graphics, interfaces, deployment и пр.).
- Семантический – язык содержит большое количество представлений реальных сущностей и конструктов.
- Произвольной точности – Wolfram Language не имеет ограничений на точность и длину чисел.
- Поддерживающий работу с запросами – так как все данные представлены в символьном виде, то с ними можно работать посредством единообразных запросов с использованием высокоуровневых функциональных конструкций.
- Реактивный – Wolfram Language позволяет использовать возможности реактивного программирования, обеспечивая возможность построения сложных динамических пользовательских интерфейсов декларативно.
- Документоориентированный – код на Wolfram Language не ограничен текстом в кодировке ASCII, а может использовать все элементы, реализуемые в документах формата CDF.
- Скриптовый – код на Wolfram Language может быть использован для сценарного задания внешних по отношению к системе операций в различных средах и на разных языках.
- JIT-компилируемый – код на Wolfram Language часто компилируется на ходу во встроенной виртуальной машине, позволяя оптимизировать производительность и использовать лучшие качества интерпретирования и компилирования.
- Платформонезависимый – код на Wolfram Language не зависит от платформ – как локальных, так и облачных.
- Поддерживающий FFI – в Wolfram Language реализована поддержка сторонних интерфейсов на разных уровнях.
- Безопасный – в коде на Wolfram Language не используются низкоуровневые конструкции, такие как указатели и выделения памяти, что позволяет избежать целого класса ошибок.
- Стабильный – на протяжении более чем 25 лет Wolfram Language практически полностью сохраняет обратную совместимость.
- Символьный – в языке Wolfram Language всё (код, данные, изображения, документы, интерфейсы, программ и прочее) является символьным выражением.
- Функциональный – Wolfram Language поддерживает расширенную версию функционального программирования на основе обобщённых преобразований.
- Декларативный – Wolfram Language представляет собой экстремальную форму декларативной концепции, что обеспечивается использованием автоматических суперфункций, которые реализуют указанные цели высокого уровня.
- Гомоиконный – с учётом символьного характера, равнозначность кода и данных является фундаментальной особенностью кода на Wolfram Language.
- Метапрограммный – символьный характер позволяет манипулировать кодом не только посредством макросов, но и с помощью множества других встроенных в язык возможностей.
- Основанный на выражениях – в Wolfram Language всё (код, данные и так далее) представлены в виде символьных выражений с древовидной структурой, где каждый элемент имеет своё значение.
- Полиморфный – определение функций посредством сопоставления с образцом позволяет достичь выраженного полиморфного поведения.
- Аппликативный – в Wolfram Language программы могут рассматриваться как применение последовательности символьных преобразований к неизменным символьным выражениям.
- Соответствующий концепции DRY – гибкость разработки в функциональной и символьной парадигме на языке Wolfram Language позволяет писать код без повторяющихся фрагментов.
- Математический – Wolfram Language охватывает самое большое количество сфер математических вычислений среди всех языков программирования.
- Символьный и численный – в языке представлена поддержка как символьных, так и численных вычислений, а многие встроенные алгоритмы комбинируют оба подхода.
- Мультиметодный – в Wolfram Language символьное сопоставление с образцом позволяет моментально обращаться к любому аргументу функции или части выражения.
- Естественноязыковой – используя ту же технологию, что и Wolfram Alpha, Wolfram Language поддерживает ввод кода на естественном языке.
- Параллелизуемый – в Wolfram Language имеется встроенная поддержка параллельных вычислений – как на отдельной машине, так и в разнородной вычислительной сети.
- Клиент-сервер ориентированный – интерактивный интерфейс Wolfram Language может сообщаться посредством символьного протокола WolframLink с одним или несколькими вычислительными ядрами.
- Поддерживающий горячую замену – поскольку Wolfram Language интерпретируется и развёртывается в символьной форме, код может быть дополнен, отлажен и изменён на любом этапе его выполнения.
- Интероперабельный – в Wolfram Language встроена поддержка работы с другими языками и сотнями различных форматов.
- Перманентный – так как всё (код, данные, графика, интерфейсы и прочее) в Wolfram Language представляется символьным выражением, то это позволяет незамедлительно их сериализовать для перманентного хранения.
- Иммутабельный – в Wolfram Language всё есть символьное выражение, представляющее своё значение, и лишь отдельные конкретные функции имеют локализованные побочные эффекты.
Ключевые идеи
- Максимальное количество встроенных знаний. В отличие от других языков программирования, философия Wolfram Language подразумевает встроить в язык максимальное количество знаний – алгоритмы и фактическую информацию о мире. В язык встроена самая большая база алгоритмов и пригодных для вычислений знаний. Это данные из тысяч различных сфер, которые курируются компанией Wolfram Researh.
- Максимальная автоматизация. У программиста должна быть возможность сосредоточиться на том, что он хочет получить, а язык должен автоматически объяснять, как этого достичь. Язык содержит тысячи уникальных метаалгоритмов для автоматического выбора исполняемых алгоритмов, автоматизации процессов программирования, презентаций, работы с интерфейсами.
- Максимальная единообразность дизайна. Элегантная и единообразная структура языка должна обеспечивать совместимость между различными областями языка, предоставлять максимальную гибкость программных конструкций и повышать читабельность, понятность и предсказуемость кода.
- Представление чего бы то ни было в виде символьных выражений. Представление данных, формул, кода, графики, документов, интерфейсов и прочего в символьном виде, что даёт большую гибкость в написании кода, а инкрементный подход подразумевает, что любой фрагмент кода может быть запущен. Подобный подход подразумевает возможность включить в код любой из перечисленных выше объектов.
- Содержание встроенной обширной модели мира. Единицы измерения, даты, локации, данные из различных областей представляются с помощью расширемого символьного фреймворка.
- Использование естественного языка для программирования. Использование технологий, отработанных в Wolfram\|Alpha, позволяют переводить обычную речь на естественном языке в вычисляемый код, что даёт возможность программировать без знания языка.
- Развёртывание языка где угодно. На локальном компьютере, в облаке, на мобильных устройствах, возможность быть встроенным; язык позволяет создать web API в любой программе, а также встроить язык в программную или аппаратную систему.
- Вычисляемые документы как часть языка. Использование документов-ноутбуков в CDF формате позволяют сочетать в одном документе исполняемый код, примеры, документации, интерактивные элементы и медиа контент; в базе Wolfram Demonstrations Project можно найти более 10 тысяч примеров.
- Удобные интерфейсы. Символьные выражения позволяют стандартизировать взаимодействия с внешними данными и программами; также язык поддерживает работу с устройствами реального времени и создание связей через собственное облако Wolfram Cloud.
- Интегрированный процесс написания и исполнения кода позволяет сразу же тестировать написанные участки кода, визуализировать результаты и проводить аналитику, что позволяет реализовать инкрементное и исследовательское программирование.
- Создание программ любого размера. Программы на Wolfram Language могут содержать как всего несколько строк, так и несколько миллионов, и их могут разрабатывать как один человек, так и большой коллектив, что обеспечивается заточенной под масштабное программирование средой. К примеру, Mathematica, почти полностью написана на Wolfram Language (лишь небольшая часть кода написана на Си).
- Максимальная выразительность языка обеспечивается его символьным характером, что позволяет использовать как привычные парадигмы, так и недавно появившиеся.
- Максимально долгая обратная совместимость. Программы, написанные 25 лет назад, могут быть запущены и в современных версиях системы.
- Кроме того, Mathematica — это интерпретируемый язык функционального программирования. Можно сказать, что система Mathematica написана на языке Mathematica, хотя некоторые функции, особенно относящиеся к линейной алгебре, в целях оптимизации были написаны на языке C. Mathematica поддерживает и процедурное программирование с применением стандартных операторов управления выполнением программы (циклы и условные переходы), и объектно-ориентированный подход. Mathematica допускает отложенные вычисления. Также в системе Mathematica можно задавать правила работы с теми или иными выражениями.
Основные элементы синтаксиса Wolfram Language
Wolfram Language допускает множество различных стилей и парадигм программирования.
Одной из главных особенностей Wolfram Language с точки зрения синтаксиса является возможность представления любой конструкции или элемента в виде композиции функций. Чтобы представить некоторую конструкцию в подобном виде, можно использовать функцию FullForm[]
.
Вот несколько примеров:
- Конструкция a+b может быть представлена как функция
Plus[a,b]
. - Равенство
a x^2 + b x + c/2 == 0
в полной форме представляется какEqual[Plus[Times[Rational[1,2],c],Times[b,x],Times[a,Power[x,2]]],0]
. - Изображение представляется в виде функции Image с определёнными параметрами и списками байтов в качестве аргументов.
- Сам рабочий документ (ноутбук) также представляет из себя функцию.
- Ячейки ноутбука являются вложенными в ноутбук функциями.
- Список {1,2,3} представляется в виде функции
List[1,2,3]
.
Некоторые функции в Wolfram Language могут быть представлены в виде специальных символов.
В Wolfram Language содержится 4 типа скобок:
- Круглые
(x)
для группировки. - Квадратные скобки для аргументов функции
[x]
. - Фигурные скобки
{a,b,c}
для списков. - Двойные квадратные скобки
[[x]]
для индексирования (для списка{a,b,c}
запись{a,b,c}[[1]]
выдаст первый элемент списка, то есть a).
Синтаксические единицы
Для интерпретации ввода и формирования из него выражений Wolfram Language использует различные синтаксические правила. Ввод разбивается интерпретатором на отдельные синтаксические единицы:
Синтаксические единицы | Примеры |
---|---|
Символы | a, xyz, αβγ
|
Строки | "some text", "α+β"
|
Числа | 123.456, 3.*10^45
|
Операторы | +, ->, !=
|
Игнорируемые участки | (*comment*)
|
К примеру, ввод xx+yy-zzzz будет разбит на последовательность xx, +, yy, - и zzzz, где xx, yy, и zzzz соответствуют символам, а + и - соответствуют операторам. В Wolfram Language представлено несколько классов операторов, различающихся порядком записи:
Порядок записи | Короткая запись | Полная запись |
---|---|---|
Префиксный | !x
|
Not[x]
|
Постфиксный | x!
|
Factorial[x]
|
Инфиксный | x+y+z
|
Plus[x,y,z]
|
Мачфиксный | {x,y,z}
|
List[x,y,z]
|
Смешанный | x/:y=z
|
TagSet[x,y,z]
|
Надфиксный |
|
OverHat[x]
|
Соответственно, задать произвольную функцию можно в том числе в одной из следующих форм:
Форма записи | Вид |
---|---|
Базовая форма | f[x]
|
Стандартная префиксная форма | f@x
|
Стандартная постфиксная форма | x//f
|
Стандартная инфиксная форма | x~f~y
|
Порядок применения операторов зависит как от их последовательности, так и от соответствующих им приоритетов. К примеру, у оператора умножения * приоритет выше, чем у оператора сложения +, потому a*b+c в полной форме будет выглядеть так: Plus[a,Times[b,c]], то есть в начале будет вычислен результат умножения. Оператор постфиксной формы применения функции // имеет низкий приоритет, потому запись a*b + c // f будет интерпретирована как f[a b + c]. Оператор префиксной формы применения функции @ имеет высокий приоритет, потому f@a*b + c будет интепретирована как c + b f[a]. Вот список приоритетов операторов:
Группа операторов | Примеры |
---|---|
Расширения символьных имён | x_, #2 , e::s
|
Различные формы применения функций | F[x], F@@{a,b,c}, x\\F, x~F~y, F@x
|
Операторы, связанные с возведением в степень | x^y,
|
Операторы, связанные с умножением |
|
Операторы, связанные со сложением |
|
Операторы отношения |
|
Стрелки и векторные операторы |
|
Логические операторы |
|
Операторы, связанные с шаблонами и правилами | x.., x|y, x->y, x/.y
|
Оператор чистой функции | x&
|
Соединитель выражений | x;y
|
Лексемы
Wolfram Language поддерживает около 63 тысяч, в том числе модифицирующих и зарезервированных компанией Wolfram Research символов Unicode. Вот их список:
Номера символов | Описание группы |
---|---|
0–127 | символы ASCII |
1–31 | управляющие символы ASCII |
32–126 | печатные символы ASCII |
97–122 | английский прописной алфавит |
129–255 | латинские ISO символы |
192–255 | буквы европейских алфавитов |
0–59391 | стандартные публичные символы Unicode |
913–1009 | греческие буквы |
12288–35839 | китайский, корейский и японский алфавиты |
8450–8504 | модифицирующие символы в математической нотации |
8592–8677 | стрелки |
8704–8945 | математические символы и операторы |
61440–63487 | частные символы Unicode, определённые специально для Wolfram Language |
Любой из этих символов может быть использован в коде, и каждому из них, за исключением модифицирующих и непечатаемых, может быть присвоено значение. Язык является регистрочувствительным.
В коде допускается написание элементов в различных индексах: верхний, нижний, надстрочный, подстрочный, задний левый, задний правый.
В коде допускается использование тех сложных в сравнении с обычным текстом структур, которые приняты в математической нотации. То есть имеется возможность записать встроенными в код корни, интегралы с пределами, матрицы, многоуровневые дроби и прочее.
Непосредственно в коде на Wolfram Language могут присутствовать изображения, документы, файлы различного формата, элементы интерфейса, графики, векторная графика, аудиофайлы и прочее.
Всё является выражением
Mathematica обрабатывает множество самых разнообразных вещей: математические формулы, списки, графики – лишь некоторые из них. Несмотря на кажущиеся большие различия, Mathematica описывает все эти вещи исключительно единообразно. Все они рассматриваются как выражения.
Самым простейшим примером выражения в Mathematica является f[x,y]
. Можно использовать f[x,y]
для представления математической функции f(x,y). Функция имеет название f, и она содержит два аргумента: x и y.
Вам не всегда потребуется формулировать выражение в виде f[x,y]
. Например, x+y также является выражением. Если вводить x+y
, то Mathematica автоматически конвертирует введенное выражение в стандартную форму Plus[x,y]
. Затем, когда наступает время вывести это выражение, оно вновь выводится в виде x+y
.
То же самое верно и для других "операторов", таких как степень ^ (Power) и частное / (Divide).
Собственно, все, что вы вводите в Mathematica рассматривается как выражение.
Сокращенная форма | Полная форма |
---|---|
x+y+z |
Plus[x,y,z]
|
x y z |
Times[x,y,z]
|
x^n |
Power[x,n]
|
{a,b,c} |
List[a,b,c]
|
a->b |
Rule[a,b]
|
a=b |
Set[a,b]
|
Объект f
в выражении f[x,y]
известен как заголовок выражения. Его можно извлечь его при помощи команды Head[выражение]
. В частности, если писать программный код в Mathematica, то часто будет возникать необходимость проверить заголовок выражения, чтобы узнать, что данное выражение из себя представляет.
In[5]:= Head[f[x, y]] (* Функция Head возвращает "имя функции" f. *)
Out[5]= f
In[6]:= Head[a + b + c] (*В данном случае Head возвращает название "оператора". *)
Out[6]= Plus
In[7]:= Head[{a, b, c}] (*Все в Mathematica имеет заголовок.*)
Out[7]= List
In[8]:= Head[23432] (*Числа также имеют заголовки. *)
Out[8]= Integer
In[9]:= Head[345.6] (*Вы можете отличать различные виды чисел по их заголовкам.*)
Out[9]= Real
Правила
Оператор замены /. (читается как "slash-dot") применяет правила к выражениям.
Синтаксис | Значение |
---|---|
expr/.lhs->rhs
|
Применить правило преобразования к выражению |
expr/.{lhs1->rhs1,lhs2->rhs2, ...} |
Применить совокупность правил к различным частям выражения |
expr/.rules |
Единожды применить правила к этой части выражения |
expr//.rules |
Применять правило до тех пор, пока выражение не перестанет изменяться |
lhs->rhs |
Вычислить rhs при задании правила |
lhs:>rhs |
Вычислить rhs при использовании правила |
В Wolfram Language мемоизация осуществляется следующим образом: f[x_]:=f[x]=rhs
.
Формы записи чисел
Числа могут быть записаны в базе от 2 до 36. По умолчанию база числа принимается за 10. Для баз, больших 10, в качестве цифр применяются буквы a-z.
Форма записи | Пример | Пояснение |
---|---|---|
цифры | 12
|
Целые числа |
цифры.цифры | 12.3 |
Действительные числа |
база^^цифры | 16^^1A2E
|
Целые числа в n-ричной системе счисления |
база^^цифры.цифры | 2^^1001.1001001
|
Действительные числа в n-ричной системе счисления |
мантисса*10^n | 2.3*10^8
|
Формат с плавающей точкой |
база^^мантисса*10^n | 2^^10011101*2^6
|
Формат с плавающей точкой в n-ричной системе счисления |
число` | 173/32`=5.40625
|
Действительное число с машинной точностью |
число`s | 173/32`3=5.41
|
Число произвольной точности с округлением до цифры s |
число``s | 173/32``3=5.406
|
Число произвольной точности, в котором первые s знаков получены точно |
Итераторы
Итераторы используются в таких функциях как Sum
, Table
, Do
и Range
.
Параметры итерации imin, imax и di не обязательно должны быть целыми числами. Переменная i задается последовательностью значений, начиная с imin, и увеличивающихся с шагом di, останавливаясь, когда следующее значение i должно превысить imax. Параметры итерации могут быть произвольными символьными выражениями во всех случаях, пока (imax – imin)/di является числом.
При использовании сразу нескольких итеративных переменных, предельные значения более удаленных переменных могут зависеть от значений предыдущих.
Переменной i не обязательно быть одиночным символом; она может быть любым символьным выражением. Значение i автоматически объявляется локальным в пределах итеративной функции. Практически это реализуется с помощью конструкции Block
, содержащей i , путем ее "оборачивания" вокруг итеративной функции.
Итератор | Описание |
---|---|
{imax} |
повторение imax раз |
{i, imax} |
i принимает значения от 1 до imax с шагом 1 |
{i, imin, imax} |
i принимает значения от imin до imax с шагом 1 |
{i, imin, imax, di} |
i принимает значения от imin до imax с шагом di |
{i, list} |
i последовательно принимает значения из списка list |
{i, imin, imax}, {j, jmin, jmax},... |
i принимает значения от imin до imax, а для каждого значения i,
j принимает значения от jmin до jmax, и т. д. |
Математические функции
Встроенные в Mathematica математические функции, такие как Log[x]
и BesselJ[n,x]
, имеют ряд общих черт.
Они содержат атрибут Listable
, что обеспечивает их применение ко всем элементам списков, являющихся их аргументами.
Они содержат атрибут NumericFunction
, что предполагает возвращение ими численных значений если их аргументы также являются численными
Они возвращают точные результаты в форме целых чисел, рациональных чисел и, в особых случаях, в форме алгебраических выражений.
За исключением тех функций, чьи аргументы всегда являются целыми числами, математические функции в Mathematica могут быть вычислены с любой численной точностью, с любыми комплексными числами в качестве аргументов. В случае, если для определенного набора аргументов функция не определена, результат вычислений возвращается в символьной форме.
Численные вычисления возвращают результат с точностью не выше той, что обусловлена точностью аргументов. Так, например, N[Gamma[27/10],100]
возвращает результат с высокой точностью, а N[Gamma[2.7],100]
не может такого обеспечить.
Там, где это возможно, символьные производные, интегралы и разложения в ряд, выполняемые встроенными математическими функциями, вычисляются в терминах других встроенных функций.
Математические константы
Встроенные в Mathematica математические константы, такие как E
и Pi
, обладают следующими свойствами:
- Они не имеют значений самих по себе.
- Они имеют числовые значения, которые могут быть выражены с любой точностью.
- Они рассматриваются как численные величины функцией
NumericQ
и во всех других местах и ситуациях. - Они содержат атрибут
Constant
и, таким образом, рассматриваются как константы в производных.
Регулярные выражения и строковые шаблоны
Строковые шаблоны в Wolfram Language дополняют, расширяют и могут заменять функционал регулярных выражений. С помощью строковых шаблонов и специальных функций можно осуществлять поиск, тестировать текст на наличие шаблона, проводить сложные замены и т. п. Ниже представлена таблица с некоторыми функциями для работы со строками.
Пример функции | Описание функции |
---|---|
StringMatchQ["s",patt] |
Проверяет, содержит ли s шаблон patt |
StringCases["s",patt] |
Выдаёт фрагменты, в которых s содержит шаблоны patt |
StringCases["s",lhs->rhs] |
Заменяет все фрагменты, удовлетворяющие lhs, на rhs |
StringPosition["s",patt] |
Выдаёт позиции, в которых встречается шаблон patt |
StringCount["s",patt] |
Выдаёт количество фрагментов, удовлетворяющих габлону patt |
StringReplaceList["s",lhs->rhs] |
Выдаёт все способы замены lhs |
StringSplit["s",patt] |
Разбивает s на фрагменты в каждом случае нахождения шаблона |
StringSplit["s",lhs->rhs] |
Разбивает строку s по lhs и производит замену на lhs |
Сравнение синтаксиса строковых шаблонов и регулярных выражений
Регулярное выражение | Строковый шаблон | Объяснение |
---|---|---|
"abc" |
"abc" |
строка "abc" |
"." |
Except["\n"] |
любой символ, исключая начало строки |
"(?s)." |
_ |
любой символ |
"(?s).+" |
__ |
один и более символов (жадное) |
"(?s).+?" |
Shortest[__] |
один и более символов (не жадное) |
"(?s).*" |
___ |
нуль и более символов |
".*" |
Except["\n"]... |
нуль и более символов, исключая начало строки |
"a?b" |
""~~"b" |
нуль или одна "a", за которой следует "b" (то есть "b" или "ab") |
"[abef]" |
Characters["abef"] |
любые из символов "a", "b", "e" или "f" |
"[abef]+" |
Characters["abef"].. |
один и более символов "a", "b", "e" или "f" |
"[a-f]" |
CharacterRange["a","f"] |
любой символ из диапозона "a"-"f" |
"[^abef]" |
Except[Characters["abef"]] |
any character except the characters "a", "b", "e", or "f" |
efg" |
"efg" |
последовательность "ab" или "efg" |
ef)gh"or "(?:ab|ef)gh" |
"ef")~~"gh" |
"ab" или "ef", за которыми следует "gh" (то есть "abgh" или "efgh") |
"\\s" |
WhitespaceCharacter |
любой пробельный символ |
"\\s+" |
Whitespace |
один и более пробельных символов |
b)\\1" |
"b"~~x_ |
либо "aa", либо "bb" |
"\\d" |
DigitCharacter |
любая цифра |
"\\D" |
Except[DigitCharacter] |
любой символ, не являющийся цифрой |
"\\d+" |
DigitCharacter.. |
одна и более цифр |
"\\w" |
"_" |
любая буква, цифра или символ "_" |
"[[:alpha:]]" |
LetterCharacter |
любая буква |
"[^[:alpha:]]" |
Except[LetterCharacter] |
любой символ, не являющийся буквой |
"^abf"or "\\Aabc" |
StartOfString~~"abf" |
"abf" в начале последовательности символов |
"(?m)^abf" |
StartOfLine~~"abf" |
"abf" с новой строки |
"wxz$"or "wxz\\z" |
"wxz"~~EndOfString |
"wxz" в конце последовательности символов |
"wxz\\Z" |
""~~EndOfString |
"wxz" в конце последовательности или перед началом новой строки |
№ | Код программы | Результат работы |
---|---|---|
1 | Пример использования строковых шаблонов и регулярных выраженийManipulate[
TextCell[Row[List@@
StringReplace[text,
{RegularExpression["\\b\\w{" <> ToString[u] <> "}\\b"] :>
Style["$0", 18, Bold]}]], "TR"],
{u, 1, 10, 1}, SaveDefinitions -> True]
|
Функциональное программирование
Примеры кода
№ | Код программы | Результат работы |
---|---|---|
1 | Каррирование функцийIn[1]:= plusFC = Function[{x},Function[{y},Plus[x,y]]];
In[2]:= curry = Function[{x}, Function[{y}, Function[{z}, x[y, z]]]];
In[3]:= Plus[2,3]
In[4]:= plusFC[2][3]
In[5]:= curry[Plus][2][3]
|
Out[1]
Out[2]
Out[3]:= 5
Out[4]:= 5
Out[5]:= 5
|
2 | Решение дифференциального уравнения с выводом регулируемой диаграммыManipulate[
Module[{plt, sol},
sol = NDSolve[{
D[T[x, y, t], {t, 1}] == alpha (D[T[x, y, t], {x, 2}] + D[T[x, y, t], {y, 2}]),
T[x, y, 0] == 400 - 400 Exp[-100000 x^2 y^2 (x - 1)^2 (y - 1)^2]
+ 350 Exp[-100000 x^2 (x - 1)^2],
T[x, 0, t] == 350 Exp[-100000 x^2 (x - 1)^2],
T[x, 1, t] == 350 Exp[-100000 x^2 (x - 1)^2], T[0, y, t] == 350,
T[1, y, t] == 350},
{T[x, y, t]}, {x, 0, 1}, {y, 0, 1}, {t, 0, 100}, PrecisionGoal -> 2];
plt = ContourPlot[
T[x, y, t] /. sol /. t -> time, {x, 0, 1}, {y, 0, 1},
ColorFunction -> "TemperatureMap", Contours -> 8,
PlotLabel -> "temperature profile" ]],
{{time, 5, "time"}, 5, 100, 0.05, Appearance -> "Labeled"},
{{alpha, 0.002, "thermal diffusivity"}, 0.001, 0.005, 0.001, Appearance -> "Labeled"},
TrackedSymbols :> {alpha, time}]
|
|
3 | Решатель судокуsolve[sudoku_] := NestWhile[Join @@ Table[ Table[ReplacePart[s, #1 -> n], {n, #2}] & @@
First@ SortBy[
{#, Complement[Range@9, s[[First@#]], s[[;; , Last@#]],
Catenate@ Extract[Partition[s, {3, 3}], Quotient[#, 3, -2]]]} & /@
Position[s, 0, {2}], Length@Last@# &], {s, #}] &, {sudoku}, !FreeQ[#, 0] &]
|
|
4 | Реализация алгоритма быстрой сортировкиQuickSort[x_List] :=
Module[{pivot},
If[Length@x <= 1, Return[x]];
pivot = RandomChoice@x;
Flatten@{QuickSort[Cases[x, j_ /; j < pivot]],
Cases[x, j_ /; j == pivot],
QuickSort[Cases[x, j_ /; j > pivot]]}]
qsort[{}] = {};
qsort[{x_, xs___}] := Join[qsort@Select[{xs}, # <= x &], {x}, qsort@Select[{xs}, # > x &]];
QuickSort[{}] := {};
QuickSort[list : {__}] :=
With[{pivot = RandomChoice[list]},
Join[<|1 -> {}, -1 -> {}|>, GroupBy[list, Order[#, pivot] &]] //
Catenate[{QuickSort@#[1], #[0], QuickSort@#[-1]}] &]
|
|
5 | Программа, выводящая произвольный текст в ASCII 3D псевдографикеlocs = Position[ImageData@ Binarize@ Rasterize["text", ImageSize -> 150], 0];
Print[StringJoin /@
ReplacePart[
ReplacePart[
ConstantArray[" ", {Max[locs[[All, 1]]] + 1, Max[locs[[All, 2]]] + 1}],
locs -> "\\"],
Map[# + 1 &, locs, {2}] -> "#"], "\n"];
|
Особенности работы в среде программирования Wolfram Mathematica
Ноутбуки и палитры
Структура ячеек
Структура ноутбуков
Форматы файлов
Шаблоны функций (сниппеты)
Двумерные конструкции
Автодополнения и контекстные меню
Интеграция с другими системами
Структура системы Wolfram
Система Wolfram является модульной системой, в которой ядро, которое занимается вычислениями, отделено от внешней оболочки, которая отвечает за взаимодействие с пользователем. Таким образом, имеется возможность запускать внешнюю оболочку на одном компьютере, а ядро, или несколько ядер – на других, возможно, удалённых компьютерах.
Основным интерфейсом для работы с системой Wolfram является ноутбук – интерактивный документ, позволяющий взаимодействовать с системой и обмениваться с ней графикой, текстом, интерактивными элементами и прочим. Ноутбук может использоваться как для проведения вычислений, так и для подготовки результатов к публикации.
Два других интерфейса системы Wolfram – текстовый интерфейс и WSTP-интерфейс (Wolfram Symbolic Transfer Protocol, символьный протокол передачи Wolfram). WSTP-интерфейс служит для взаимодействия с другими средами и программами. На его основе реализованы связи с различными языками и средами, в том числе J/Link, .NET/Link и прочие.
Внутренние компненты | Ядро Wolfram Language | Компонент, реализующий вычисления |
---|---|---|
Внешняя оболочка (фронт-энд)
системы Wolfram |
Компонент, отвечающий за взаимодействие с пользователем | |
Интерфейсы | Ноутбук | Интерактивное взаимодействие с пользователем |
Текстовый | Взаимодействие через консоль | |
WSTP | Взаимодействие с другими программами |
Поддерживаемые форматы
Интеграция с JAVA
Интеграция Wolfram Language с Java осуществляется с помощью пакета J/Link, который позволяет выполнять код на Java в Wolfram Language, а также управлять ядром Wolfram Language из программ на Java. Данный пакет предоставляет пользователям WL использовать возможности классов Java, а Java программистам даёт возможность использовать Wolfram Language в качестве командной строки для реализации скриптов, одновременного написания и тестирования классов, а также для реализации вычислительных возможностей Wolfram Language в Java программах.
J/Link позволяет загружать Java классы в Wolfram Language, а затем создавать объекты, вызывать методы, осуществлять доступ к полям. Таким образом, все возможности языка Java могут быть реализованы в Wolfram Language.
К примеру, можно реализовать основанный на Java пользовательский интерфейс полностью внутри Wolfram Language. Это может быть как простой индикатор выполнения для длительных расчётов, так и сложный многокомпонентный полностью независимый интерфейс с использованием AWT, Swing и прочих библиотек. J/Link позволяет писать Java программы на языке Wolfram Language. В целом, функционал можно описать так:
- вызов Java методов из Wolfram Language;
- написание Java программ, использующих сервисы Wolfram инфраструктуры;
- создание альтернативного фронт-энда Wolfram Language;
- создание диалоговых окон и других элементов интерфейса для программ на Wolfram Language;
- написание апплетов, использующих ядра Wolfram Language на стороне клиента/сервера;
- написание сервлетов, позволяющих иметь доступ к Wolfram инфраструктуре через HTTP.
J/Link – продукт с открытым исходным кодом, который содержит компоненты, написанные на Wolfram Language, Java и C. Ключевым компонентом данного интерфейса является WSTP – протокол Wolfram Research, осуществляющий связь Wolfram Language с другими программами. J/Link является надстройкой над WSTP, предоставляя пользователям более высокоуровневый интерфейс.
Подготовка пакета к использованию:
In[1]:= Needs["JLink`"] (* Загрузка пакета *)
In[2]:= InstallJava[] (* Установка и подготовка к использованию Java runtime*)
Пример использования:
In[1]:= Needs["JLink`"]
InstallJava[]
sha256Signature[bytesList_] :=
JavaBlock@
Module[{mdo}, LoadJavaClass@ "java.security.MessageDigest";
mdo = MessageDigest`getInstance@ "SHA-256";
mdo@ update[bytesList];
mdo@ digest[]]
sha256Signature@ Range@10
Out[1]= {-56, 72, -31, 1, 63, -97, 4, -87, -42, 63, -92, 60, -25, -3, 74,
-16, 53, 21, 44, 124, 102, -102, 74, 64, 75, 103, 16, 124, -18, 95,
46, 78}
Интеграция со средой разработки .NET
Интерфейс .NET/Link позволяет как работать с .NET напрямую через Wolfram Language, так и вызывать его из .NET программ. Функционал интерфейса схож с J/Link, однако важным отличием является то, что .NET является средой, нейтральной к языкам, то есть позволяет организовать связь Wolfram Language со всеми языками, для которых представлены компиляторы в .NET. В числе данных языков C#, Visual Basic .NET, JScript, Visual J# .NET, C++ а также Fortran, Perl, Python, Eiffel и COBOL. Использование .NET/Link вместо J/Link может быть предпочтительнее в случае разработки приложений исключительно под Windows, а J/Link лучше подходит для кроссплатформенной разработки. Одним из преимуществ перед является возможность вызывать DLL в С-стиле прямо из Wolfram Language и управлять COM-объектами.
In[1]:= Needs["NETLink`"] (* Загрузка пакета *)
In[2]:= InstallNET[] (* Установка и подготовка к использованию .NET runtime*)
Использование
Категория | C# | Wolfram Language |
---|---|---|
Конструкторы | MyClass obj = new MyClass(args); |
obj = NETNew["MyClass", args];
|
Методы | obj.MethodName(args); |
obj@MethodName[args]
|
Свойства и поля | obj.PropertyOrFieldName = 1; value = obj.PropertyOrFieldName;
|
obj@PropertyOrFieldName = 1; value = obj@PropertyOrFieldName;
|
Статические методы | MyClass.StaticMethod(args); |
MyClass`StaticMethod[args];
|
Статические свойства и поля | MyClass.StaticPropertyOrField = 1; value = MyClass.StaticPropertyOrField;
|
MyClass`StaticPropertyOrField = 1; value = MyClass`StaticPropertyOrField;
|
Интеграция с R
Интеграция Wolfram Language с языком программирования R осуществляется с помощью интерфейса RLink, который реализован через JLink и RJava / JRI Java библиотеки. С его помощью возможно осуществлять обмен данными между двумя системами и выполнять код на R прямо в Wolfram Language.
Подготовка пакета к использованию:
In[1]:= Needs["RLink`"] (* загрузка пакета RLink *)
In[2]:= InstallR[] (* Конфигурирование и запуск среды исполнения R *)
In[3]:= REvaluate["{ (* Выполнение кода на R *)
x <- c(0,1,1,2,3,5,8,13,21,34)
mx<- mean(x)
medx<-median(x)
sdx <- sd(x)
varx<- var(x)
results <-c(mx,medx,sdx,varx)
}"]
Out[3]= {8.8, 4., 11.0333, 121.733}
Конвертация из Wolfram Language в R:
In[3]:= ToRForm[Range[10]]
Out[3]= RVector["integer", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, RAttributes[]]
Конвертация из R в Wolfram Language:
In[3]:= FromRForm[ RVector["integer", {1, 4, 2, 5, 3, 6},
RAttributes["dim" :> RVector["integer", {2, 3}, RAttributes[]]]]]
Out[3]= {{1, 2, 3}, {4, 5, 6}}
Поддержка C кода
Высокопроизводительные вычисления: HadoopLink
Работа с TeX/LATeX
Интеграция с Excel
Интеграция с CAD системами
История версий
Наименование | Версия | Дата релиза[103] | Основные изменения |
---|---|---|---|
Mathematica | 1.0 | 23 июня 1988[103][104][105][106] |
|
1.1 | 1989[107] | ||
1.2 | 1 августа 1989[108] |
| |
Mathematica 2 | 2.0 | 15 января 1991[109] |
|
2.1 | 15 июня 1992 |
| |
2.2 | 1 июня 1993[110] |
| |
Mathematica 3 | 3.0 | 3 сентября 1996[109] |
|
3.0.1 | 29 июля 1997 | ||
Mathematica 4 | 4.0 | 19 мая 1999[111] |
|
4.0.1 | сентябрь 1999 | ||
4.0.2 | август 2000 | ||
4.1 | 2 ноября 2000 |
| |
4.2 | 1 ноября 2002 |
| |
Mathematica 5.0 | 5.0 | 12 июня 2003[112] |
|
5.0.1 | январь 2004 | ||
Mathematica 5.1 | 5.1 | 25 октября 2004[113] |
|
5.1.1 | март 2005 | ||
Mathematica 5.2 | 5.2 | 20 июня 2005[114] |
|
Mathematica 6 | 6.0 | 1 мая 2007[115][116] |
|
6.0.1 | 5 июля 2007[117] |
| |
6.0.2 | март 2008[118] |
| |
6.0.3 | июнь 2008[118] |
| |
Mathematica 7 | 7.0 | 18 ноября 2008[119] |
|
7.0.1 | 5 марта 2009[120] |
| |
Mathematica 8 | 8.0 | 15 ноября 2010 |
|
8.0.1 | 23 октября 2011 |
| |
8.0.2 |
| ||
8.0.3 |
| ||
8.0.4 | 26 октября 2011 |
| |
Mathematica 9 | 9.0.0 | 28 ноября 2012 |
|
Mathematica 10 | 10.0.0 | 9 июля 2014 |
|
10.0.1 | 16 сентября 2014 |
| |
10.0.2 | 10 декабря 2014 | ||
10.1 | 30 марта 2015 |
| |
10.2 | 14 июля 2015 | ||
10.3 | 15 октября 2015 |
Расширения Mathematica
AceFEM — среда для решения физических и математических задач методом конечных элементов.
AceGen — система автоматической генерации и оптимизации кода.
Analog Insydes — пакет для моделирования, анализа и создания электрических схем.
BEST Viewpoints — программа для получения определённой информации из набора данных.
Derivatives Expert — анализ ценных бумаг и деривативов.
Experimental Data Analyst — обработка экспериментальных данных, определение параметров зависимостей, оценка ошибок.
Fuzzy Logic — набор инструментов для создания, модификации и визуализации нечётких множеств, а также систем, основанных на нечёткой логике.
Geometrica — геометрическая энциклопедия с возможностями точного построения геометрических объектов и проверки утверждений.
Geometry Expressions — расширение для символьной геометрии.
Global Optimization — глобальная оптимизация нелинейных функций.
KNITRO for Mathematica — решение задач крупномасштабной нелинейной оптимизации.
LensLab — пакет для трассировки лучей, рендеринга и анализа оптических систем.
LinkageDesigner — пакет виртуального макетирования связей.
machine learning framework — построение точных моделей по наборам данных.
MathCode C++ — генерирует оптимизированный код на C++ из программы на Mathematica.
MathCode F90 — генерирует оптимизированный код на Fortran 90 из программы на Mathematica.
Mathematica Link for Excel — взаимодействие Mathematica с Excel.
Mathematica Link for LabVIEW — взаимодействие Mathematica с LabVIEW.
MathModelica (SystemModeler) — платформа для разработки инженерных и биологических моделей.
MathOptimizer — система оптимизации.
MathOptimizer Professional — система оптимизации, использующая внешнее приложение LGO Solver Suite.
MechanicalSystems — анализ механических систем.
Neural Networks — моделирование и анализ искусственных нейронных сетей.
Objectica — полная поддержка возможностей объектно-ориентированного программирования в Mathematica.
Operations Research — решения задач линейной оптимизации, квадратичного программирования, поиска наименьшего пути, комбинаторной оптимизации и эвристики.
Optica — проектирование и анализ оптических систем.
PathwayLab Research Edition — анализ цепочек биохимических реакций.
SchematicSolver — аналитическое исследование аналоговых и цифровых систем.
SEM — поддержка супервычислений.
SmartCAE Heat Transmission — моделирование теплопередачи.
Statistical Inference Package — интерфейс для статического анализа.
Structural Mechanics — моделирование систем механики сплошных сред.
Tensors in Physics — пакет тензорных вычислений.
Time Series — среда для анализа данных, зависящих от времени.
TSi ProPac — моделирование систем управления и динамики многих тел.
UnRisk PRICING ENGINE — быстрый расчёт финансовых рисков.
VisualDSolve — визуализация дифференциальных уравнений.
Примечания
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/3DS.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/ACO.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/AIFF.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/AVI.html
- ↑ https://www.wolframalpha.com/input/?i=Entity%5B%22FileFormat%22%2C+%22BDF-4%22%5D
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/BMP.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/BZIP2.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/CDF.html
- ↑ https://reference.wolfram.com/language/ref/format/CIF.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/CSV.html
- ↑ https://reference.wolfram.com/language/ref/format/DBF.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/DICOM.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/DIF.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/DIMACS.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/DOT.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/DXF.html
- ↑ https://reference.wolfram.com/language/ref/format/EDF.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/EPS.html
- ↑ https://reference.wolfram.com/language/ref/format/FASTA.html
- ↑ https://reference.wolfram.com/language/ref/format/FASTQ.html
- ↑ https://reference.wolfram.com/language/ref/format/FITS.html
- ↑ https://reference.wolfram.com/language/ref/format/FLAC.html
- ↑ https://reference.wolfram.com/language/ref/format/GenBank.html
- ↑ https://reference.wolfram.com/language/ref/format/GeoTIFF.html
- ↑ https://reference.wolfram.com/language/ref/format/GIF.html
- ↑ https://reference.wolfram.com/language/ref/format/GPX.html
- ↑ https://reference.wolfram.com/language/ref/format/Graphlet.html
- ↑ https://reference.wolfram.com/language/ref/format/GraphML.html
- ↑ https://reference.wolfram.com/language/ref/format/GRIB.html
- ↑ https://reference.wolfram.com/language/ref/format/GTOPO30.html
- ↑ https://reference.wolfram.com/language/ref/format/GXL.html
- ↑ https://reference.wolfram.com/language/ref/format/GZIP.html
- ↑ 1 2 https://reference.wolfram.com/language/ref/format/HDF.html
- ↑ https://reference.wolfram.com/language/ref/format/HTML.html
- ↑ https://reference.wolfram.com/language/ref/format/ICO.html
- ↑ https://reference.wolfram.com/language/ref/format/ICS.html
- ↑ https://reference.wolfram.com/language/ref/format/JPEG.html
- ↑ https://reference.wolfram.com/language/ref/format/JPEG2000.html
- ↑ https://reference.wolfram.com/language/ref/format/JSON.html
- ↑ https://reference.wolfram.com/language/ref/format/JVX.html
- ↑ https://reference.wolfram.com/language/ref/format/KML.html
- ↑ https://reference.wolfram.com/language/ref/format/LaTeX.html
- ↑ https://reference.wolfram.com/language/ref/format/LWO.html
- ↑ https://reference.wolfram.com/language/ref/format/MAT.html
- ↑ https://reference.wolfram.com/language/ref/format/MathML.html
- ↑ https://reference.wolfram.com/language/ref/format/MDB.html
- ↑ https://reference.wolfram.com/language/ref/format/MGF.html
- ↑ https://reference.wolfram.com/language/ref/format/MIDI.html
- ↑ https://reference.wolfram.com/language/ref/format/MPS.html
- ↑ https://reference.wolfram.com/language/ref/format/MTP.html
- ↑ https://reference.wolfram.com/language/ref/format/MTX.html
- ↑ https://reference.wolfram.com/language/ref/format/NDK.html
- ↑ https://reference.wolfram.com/language/ref/format/NetCDF.html
- ↑ https://reference.wolfram.com/language/ref/format/NEXUS.html
- ↑ https://reference.wolfram.com/language/ref/format/OBJ.html
- ↑ https://reference.wolfram.com/language/ref/format/OFF.html
- ↑ https://reference.wolfram.com/language/ref/format/OpenEXR.html
- ↑ https://reference.wolfram.com/language/ref/format/PBM.html
- ↑ https://reference.wolfram.com/language/ref/format/PGM.html
- ↑ https://reference.wolfram.com/language/ref/format/PCX.html
- ↑ https://reference.wolfram.com/language/ref/format/PDB.html
- ↑ https://reference.wolfram.com/language/ref/format/PDF.html
- ↑ https://reference.wolfram.com/language/ref/format/PLY.html
- ↑ https://reference.wolfram.com/language/ref/format/PNG.html
- ↑ https://reference.wolfram.com/language/ref/format/PPM.html
- ↑ https://reference.wolfram.com/language/ref/format/QuickTime.html
- ↑ https://reference.wolfram.com/language/ref/format/RIB.html
- ↑ https://reference.wolfram.com/language/ref/format/RSS.html
- ↑ https://reference.wolfram.com/language/ref/format/RTF.html
- ↑ https://reference.wolfram.com/language/ref/format/SCT.html
- ↑ https://reference.wolfram.com/language/ref/format/SDF.html
- ↑ https://reference.wolfram.com/language/ref/format/SFF.html
- ↑ https://reference.wolfram.com/language/ref/format/SHP.html
- ↑ https://reference.wolfram.com/language/ref/format/SMILES.html
- ↑ https://reference.wolfram.com/language/ref/format/SND.html
- ↑ https://reference.wolfram.com/language/ref/format/SP3.html
- ↑ https://reference.wolfram.com/language/ref/format/STL.html
- ↑ https://reference.wolfram.com/language/ref/format/SXC.html
- ↑ https://reference.wolfram.com/language/ref/format/TAR.html
- ↑ https://reference.wolfram.com/language/ref/format/Text.html
- ↑ https://reference.wolfram.com/language/ref/format/TGA.html
- ↑ https://reference.wolfram.com/language/ref/format/TGF.html
- ↑ https://reference.wolfram.com/language/ref/format/TIFF.html
- ↑ https://reference.wolfram.com/language/ref/format/TLE.html
- ↑ https://reference.wolfram.com/language/ref/format/TSV.html
- ↑ https://reference.wolfram.com/language/ref/format/UUE.html
- ↑ https://reference.wolfram.com/language/ref/format/VCF.html
- ↑ https://reference.wolfram.com/language/ref/format/VCS.html
- ↑ https://reference.wolfram.com/language/ref/format/VTK.html
- ↑ https://reference.wolfram.com/language/ref/format/WAV.html
- ↑ https://reference.wolfram.com/language/ref/format/XBM.html
- ↑ https://reference.wolfram.com/language/ref/format/XHTML.html
- ↑ https://reference.wolfram.com/language/ref/format/XLS.html
- ↑ https://reference.wolfram.com/language/ref/format/XML.html
- ↑ https://reference.wolfram.com/language/ref/format/XYZ.html
- ↑ https://reference.wolfram.com/language/ref/format/ZIP.html
- ↑ https://reference.wolfram.com/language/ref/format/AU.html
- ↑ https://reference.wolfram.com/language/ref/format/Base64.html
- ↑ https://reference.wolfram.com/language/ref/format/BYU.html
- ↑ https://reference.wolfram.com/language/ref/format/C.html
- ↑ https://reference.wolfram.com/language/ref/format/EMF.html
- ↑ 1 2 The Software Engineering of Mathematica — 2012.
- ↑ 1 2 [1], Nasser M. Abbasi.
- ↑ Mathematica Scrapbook: June 23, 1988: Mathematica 1.0 Is Launched!
- ↑ http://www.mathematica-journal.com/issue/v9i1/news.html Mathematica Journal, Volume 9, Issue 1
- ↑ Supercomputer Pictures Solve the Once Insoluble, John Markoff, October 30, 1988.
- ↑ Mathematica 1.1. Biotechnology Software. Vogel, W. K. (1989)
- ↑ Mathematica 1.2 adds new graphics options: upgrade also promises concurrent operations by Elinor Craig, MacWeek, July 25, 1989.
- ↑ 1 2 [2], Wolfram news archive, 1996.
- ↑ New version of Mathematica, Mechanical Engineering, June 1, 1993.
- ↑ Mathematica 4.0 by Charles Seiters, Macworld, October 1, 1999.
- ↑ Mathematica 5.0 Adds Up: Exactly 15 years after Mathematica’s initial release, Wolfram Research has released Mathematica , PC Magazine, September 3, 2003.
- ↑ Mathematica 5.1’s Web Services Add Up; Mathematica 5.1 delivers improvements over Version 5.0 that are vastly out of proportion for a .1 upgrade. by Peter Coffee, eWeek, December 6, 2004.
- ↑ Mathematica hits 64-bit, MacWorld UK, July 13, 2005.
- ↑ [3] Today, Mathematica is reinvented — Blog by Stephen Wolfram
- ↑ Mathematica 6: Felix Grant finds that version 6 of Wolfram Research’s symbolic mathematical software really does live up to its expectations. Scientific Computing, 2007.
- ↑ [4], Wolfram Blog, 2007.
- ↑ 1 2 [5], Mathematica Quick Revision History.
- ↑ [6], Mathematica 7.0 Released Today! — Blog by Stephen Wolfram
- ↑ [7], Announcing Mathematica 7.0.1.
- ↑ [8], Wolfram Data Drop is Live
Ссылки
- Сайт программы
- Документация
- Краткий обзор Mathematica
- Список расширений программы
- Сайт Русскоязычной поддержки Wolfram Mathematica
- Официальные курсы Wolfram Mathematica
- Ресурсы для изучения Wolfram Language (Mathematica) на русском языке
Литература
- Дьяконов В. П. Компьютерная математика. Теория и практика. — М., СПб: «Нолидж», «Питер», 1999,2001. — С. 1296. — ISBN 5-89233-065-4.
- Дьяконов В. П. Системы символьной математики Mathematica 2 и Mathematica 3. — М.: «СК-ПРЕСС», 1998. — С. 320. — ISBN 5-89233-017-6.
- Дьяконов В. П. Mathematica 4 с пакетами расширения. — М.: «Нолидж», 2000. — С. 608. — ISBN 5-89251-086-7.
- В. Дьяконов, Ю. Новиков, В. Рычаков. Компьютер для студента. Самоучитель. — СПб.: «ПИТЕР», 2000. — С. 592. — ISBN 5-272-00082-X.
- Дьяконов В. П. Mathematica 4. Учебный курс. — СПб.: «ПИТЕР», 2001. — С. 656. — ISBN 5-572-00275-X.
- Дьяконов В. П. Mathematica 4.1/4.2/5.0 в математических и научно-технических расчетах. — М.: «СОЛОН-Пресс», 2004. — С. 696. — ISBN 5-98003-065-4.
- Морозов А. А., Таранчук В. Б. Программирование задач численного анализа в системе Mathematica: Учеб. пособие.- Мн.: БГПУ, 2005. — 145 с. http://elib.bsu.by/handle/123456789/27553
- Дьяконов В. П. Mathematica 5/6/7. Полное руководство. — М.: «ДМК Пресс», 2009. — С. 624. — ISBN 978-5-94074-553-2.
- Дьяконов В. П. Mathematica 5.1/5.2/6 в математических и научно-технических расчетах. Изд-е второе дополненное и переработанное. — М.: «СОЛОН-Пресс», 2008. — С. 744. — ISBN 978-5-91359-045-9.
- Дьяконов В. П. Mathematica 5.1/5.2/6. Программирование и математические вычисления. — М.: «ДМК-Пресс», 2008. — С. 576. — ISBN 5-94074-405-2.
- Чарльз Генри Эдвардс , Дэвид Э. Пенни. Дифференциальные уравнения и проблема собственных значений: моделирование и вычисление с помощью Mathematica, Maple и MATLAB = Differential Equations and Boundary Value Problems: Computing and Modeling. — 3-е изд. — М.: «Вильямс», 2007. — ISBN 978-5-8459-1166-7.
- Шмидский Яков Константинович. Mathematica 5. Самоучитель. Система символьных, графических и численных вычислений. — М.: «Диалектика», 2004. — С. 592. — ISBN 5-8459-0678-4.
- Дьяконов Владимир Павлович. Вейвлеты. От теории к практике. Издание 2-е дополненное и переработанное. — М.: «СОЛОН-Пресс», 2004. — С. 400. — ISBN 5-98003-5.
- Глушко В. П., Глушко А. В. Курс уравнений математической физики с использованием пакета Mathematica. — СПб.: «Лань», 2010. — С. 320. — ISBN 978-5-8114-0983-9.
- Таранчук В.Б. Основные функции систем компьютерной алгебры . — Минск: БГУ, 2013. — 59 p.
- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 1988 году
- Wolfram Research
- Программы математического моделирования
- Программное обеспечение для OS X
- Программное обеспечение для Solaris
- Программное обеспечение для Windows
- Программное обеспечение для Linux
- Предметно-ориентированные языки программирования
- Редакторы формул
- Системы компьютерной алгебры
- Проприетарное кроссплатформенное программное обеспечение
- Языки программирования
- Функциональное программирование
- Логическое программирование