[Перевод] Обзор новых возможностей Mathematica 11 и языка Wolfram Language
Перевод поста Стивен Вольфрам (Stephen Wolfram) «Today We Launch Version 11!».
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации
Содержание
— Первое, что вы отметите…
— 3D печать
— Машинное обучение и нейронные сети
— Аудио
— Встроенные данные о чем угодно: от скелетной структуры и продуктов питания до сведений о нашей Вселенной
— Вычисления с реальными объектами
— Передовые возможности географических вычислений и визуализаций
— Не забудем про сложные задачи математического анализа и теоретической физики…
— Образование
— Совмещение всех функций в одно целое
— Визуализация
— От строк к тексту
— Современный подход к программированию систем
— Работа в интернете
— Облачные данные
— Подключайтесь к любым внешним сервисам: Facebook, Twitter, Instagram, ArXiv, Reddit и многим другим…
— WolframScript
— Новое в ядре языка Wolfram Language
— И еще много нового…Я рад объявить о выходе новой версии системы Mathematica и 11-й версии языка Wolfram Language, доступной как для Desktop-компьютеров, так и в облачном виде. В течение последних двух лет сотни человек упорно трудились над ее созданием, а несколько тысяч часов и я лично. Я очень взволнован; это важный шаг вперед, имеющий важное значение для многих крупнейших технологических областей.
Прошло больше 28 лет с тех пор, как вышла 1-я версия, — и почти 30 лет с тех пор, как я занялся ее разработкой. И все это время я продолжал воплощать дерзкую мечту — строить все больший и больший стек технологий. Большая часть программного обеспечения спустя несколько лет и несколько версий, за исключением мелких доработок, практически не меняется. С системой Mathematica и Wolfram Language сложилась совсем другая история: в течение трех десятилетий мы c каждой новой версией продвигались вперед, завоевывая постепенно огромное количество новых областей.
Это удивительное интеллектуальное путешествие для меня и для всех нас. С самого начала у нас был серьезный набор основополагающих принципов и сильная основная структура, так что в течение трех десятилетий мы могли просто продолжать строить на этом фундаменте все больше, создавая все то, что стало теперь огромной системой, сохраняющей свое единство, элегантность, и, откровенно говоря, современность. В первые годы мы сосредоточились на абстрактных областях вроде математики. Но со временем мы охватывали все больше видов вычислений и знаний.
Каждая новая версия это множество новых идей и много тысяч часов тяжелой работы. Более того — она представляет собой постоянно растущую систему рычагов, созданную с помощью нашей технологии. Это происходит потому, что одним из наших ключевых принципов является автоматизация, и в каждой новой версии мы используем все предыдущие достижения из этой области, — так что, в сущности, у нас появляется все больше и больше строительных блоков, благодаря которым мы можем все быстрее двигаться дальше. В создание и поддержание единой для всей системы структуры в течение многих лет вкладывались огромные усилия, так что в результате все эти строительные блоки из разных областей идеально подходят друг к другу.
При использовании традиционных подходов к разработке программного обеспечения нам потребовалось бы очень много лет для создания того, что мы добавили к 11-й версии. И тот факт, что мы можем представить сейчас новую версию, является прямым отражением эффективности нашей технологии, наших принципов и нашей методологии. Мне очень приятно видеть, что мы так далеко продвинулись не только в плане содержимого системы, но и в том, насколько эффективно мы можем развивать его. Не говоря уже о том, что все эти направления, которыми мы занимались на протяжении многих лет в рамках логического развития нашей системы, оказались сейчас именно тем, что нужно для многих наиболее активно развивающихся технологических областей.
Много лет мы называли нашу основную систему Mathematica. Однако после того, как мы добавили новые направления, а также вышли далеко за пределы вещей, связанных каким-либо образом с «математикой», мы решили ввести понятие Wolfram Language, чтобы передать суть всего того, что мы делаем. И сейчас Wolfram Language определяет работу не только системы Mathematica, но также и Wolfram Development Platform и Wolfram Programming Lab, а также других продуктов и платформ. И благодаря единству нашей разработоки программного обеспечения мы можем сегодня выпустить 11-ю версию всех наших систем, основанных на Wolfram Language.
ОК, так что же такого грандиозного и нового в 11-й версии? Ну, мы подготовили даже не одно большое нововведение, а много. Чтобы вы могли оценить масштаб: мы добавили 555 совершенно новых функций, представляющих огромное количество новых функциональных возможностей (по сравнению с первой версией, в которой была 551 функция в общей сложности). На самом деле, в данное число функций не включены даже углубленные варианты многих существующих функций.
Мы управляем развитием компании таким образом, что у нас всегда есть портфель актуальных проектов — от достаточно мелких до тех, которые могут потребовать на реализацию пять или более лет. 11-я версия включает в себя результаты нескольких пятилетних проектов. Мы заинтересованы в том, чтобы как можно быстрее доносить результаты наших исследований до пользователей, так что с момента выхода 10-й версии у нас было несколько промежуточных релизов; в результате 11-я версия фактически представляет собой сочетание многих совершенно новых разработок, которые мы уже анонсировали в версиях 10.1, 10.2, 10.3 и 10.4 (многие функции, которые были помечены как «экспериментальные» в 10.x выпусках, доступны теперь полностью в версии 11.0).
Первое, что вы отметите…
При первом запуске 11-й версии на рабочем столе первым, что вы заметите, будет новый внешний вид документов с более четкими шрифтами и строгим дизайном. При вводе кода появляется много новых вариантов автозаполнения (становится все труднее набрать что-то неправильно), а также при вводе текста работает новый спеллчекер в режиме реального времени, который мы будем постоянно обновлять, чтобы быть уверенными в том, что в него включены последние слова.
Если на вашем компьютере установлен один из дюжины других языков, кроме английского, вы увидите, что каждая функция автоматически помечается «подписью» на выбранном вами языке:
Когда вы запустите код, то заметите, что сообщения также выглядят по-разному, — и, что очень удобно, они позволяют сразу увидеть, какие функции были вызваны во время создания сообщения.
3D печать
В 11-й версии появилось много новых областей. Давайте перейдем к одной из них: 3D-печати. Впервые я напечатал в 3D еще в 2002 году. В течение многих лет мы экспортировали в STL. Для 11-й версии мы создали полный цикл, который начинается от создания 3D-геометрии и заканчивается в тот момент, когда готовое изделие лежит на вашем 3D-принтере.
Раньше мне хотелось взять чертеж в 3D и просто распечатать его — тоже в 3D. И иногда мне везло и это было легко осуществить. Но в большинстве случаев это неудобно и сложно, поскольку графики, которые высвечиваются на экране, не обязательно соответствуют геометрии, которая может быть напечатана на 3D-принтере. Так что удобно настроить или исправить геометрию так, чтобы она действительно работала на 3D-принтере, оказывается трудной задачей (и да — если вы сделаете это неправильно, из принтера может брызнуть пластик).
В 11-й версии стало возможным взять любой 3D-график и просто напечатать его в 3D. Или вы можете получить структуру молекулы или перепад высот вокруг горы, и тоже просто напечатать их в 3D. За эти годы я много печатал в 3D, и каждый раз это было своего рода маленькое приключение. Но теперь, благодаря 11-й версии, легко распечатать в 3D практически все, что угодно. И теперь, когда я думаю об этом, мне кажется нужна 3D-распечатка того, как рос Wolfram Language по разным областям…
Машинное обучение и нейронные сети
В некотором смысле, Mathematica и Wolfram Language всегда занимались искусственным интеллектом (ИИ). На протяжении многих лет мы были пионерами в решении серии проблем, связанных с ИИ: от математического решения автоматизации эстетики до понимания естественного языка. Но еще в 10-й версии мы сделали большой шаг вперед в отношении машинного обучения — речь идет о разработке максимально автоматизированных главных функций (Classify и Predict).
Должен сказать, что я не понимал, хорошо ли эти функции будут работать на практике. Прекрасно было наблюдать, насколько хорошо они работают, — и очень здорово видеть, что многие из наших пользователей могут внедрить машинное обучение в свою работу исключительно с помощью разработанной нами автоматизации и без консультации у специалистов по машинному обучению.
В 11-й версии мы изрядно продвинулись вперед в области машинного обучения. Теперь у нас есть новые способы осуществлять не только классификацию и прогнозирование, но и операции выделения признаков, уменьшения размера, кластеризации и так далее. И мы также очень много «обучаем» нашу систему, чтобы предоставлять пользователям готовые функции машинного обучения. Машинное обучение — это новое интересное направление разработки. По сути, это процесс курирования. Это как если бы вместо того, чтобы, скажем, собирать данные о различных видео, вы собираете столько изображений различных видов животных, сколько возможно.
В 11-ю версию встроены такие функции, как ImageIdentify, которая идентифицирует более 10000 различных видов объектов. Благодаря общей структуре довольно просто взять уже выделенные характеристики и использовать их для обучения новых классификаторов изображений более эффективно, чем раньше.
Мы много сделали для автоматизации наиболее распространенных из сегодняшних задач машинного обучения. Но только в последние годы стало ясно, что с помощью современных методов машинного обучения (и, в частности, с использованием нейронных сетей) может быть решено множество задач. Это поистине удивительный эпизод из истории науки: та область нейронных сетей, которой я занимался почти 40 лет, из кажущейся почти безнадежной стала одной из самых горячих областей, в которой почти каждую неделю делаются новые открытия.
Ну хорошо — допустим, вы тоже хотите заняться этим. Да, вы можете что-то собирать с помощью целого ряда низкоуровневых библиотек. Но при создании 11-й версии мы поставили перед собой цель создать оптимизированный символьный способ настройки и обучения нейросетей, в которых должно быть автоматизировано как можно больше из того, что они в принципе могут делать. В 11-й версии есть теперь функции вроде NetGraph и NetChain наряду со всевозможными «специальными функциями нейронных сетей» типа DotPlusLayer или ConvolutionLayer. И с помощью этих функций можно взять новейшие сети и быстро настроить их в Wolfram Language (рекуррентные сети в 11-й версии пока не совсем доделаны, однако они появятся в ближайшее время).
Конечно, все это хорошо работает благодаря интеграции с Wolfram Language. Нейронная сеть — это просто Graph объект, как и любой другой. И такие вводимые данные, как изображения или тексты, могут немедленно и автоматически обрабатываться с помощью стандартных возможностей Wolfram Language в формах, подходящих для нейросетевых вычислений.
Из их названия («нейронные сети») кажется, что они связаны с мозгом. Однако на самом деле это совершенно общие вычислительные структуры: они соответствуют сложным комбинациям простых функций. Они не связаны с теми простейшими программами, которые я так долго изучал, хотя и обладают специальными характеристиками, настроенными так, чтобы легко обучаться на примерах.
У нас всегда были функции статистической подгонки данных и интерполяции. Однако у нейронных сетей значительно богаче пространство возможных вычислительных структур для подгонки данных или обучения. Замечательно, что только за последние пару лет столько различных областей претерпели революционные изменения, — и скоро их станет еще больше.
Я надеюсь, что мы сможем ускорить этот процесс с помощью 11-й версии. Нам удалось сделать «нейросетевое программирование» просто еще одной парадигмой программирования, наравне с остальными интегрированной в Wolfram Language. Это очень результативно и позволяет взаимодействовать с огромными обучающими последвательностями. Но в конечном итоге, думаю, самая сильная вещь — это то, что оно сразу же вписывается во все, что делает Wolfram Language. Даже в 11-й версии мы уже использовали его при работе с нашими внутренними алгоритмами в таких областях, обработка изображений, сигналов и текста. История «нейросетевого программирования» еще очень молода, и я рад, что Wolfram Language будет играть центральную роль в ней.
Аудио
Хорошо, давайте обратимся к еще одной новой области 11-й версии: аудио. Наша цель — иметь возможность обрабатывать любые данные непосредственно в Wolfram Language. У нас уже есть такие объекты, как графические примитивы (из которых можно строить сколь угодно сложную векторную 2D и 3D графику), растровые изображения (также 2D и 3D), геометрические вычисляемые объекты, графы и сети, формулы и множество других функций, последовательно представленных в языке в виде символьных структур. И, начиная с 11-й версии, теперь стал доступен еще один тип данных — аудио.
С аудио работать сложно из-за его размера. Однако в 11-й версии можно беспрепятственно обработать, скажем, час аудио непосредственно в Wolfram Language. Безусловно, за этим стоят технологии кэширования, потоковой передачи данных и так далее. Но это все автоматизировано — и в языке это просто объект, задаваемый функцией Audio. Этот Audio-объект можно сразу же подвергнуть крайне сложной обработке и анализу, которые доступны только в Wolfram Language.
Встроенные данные о чем угодно: от скелетной структуры и продуктов питания до сведений о нашей Вселенной
Wolfram Language — язык, основанный на знаниях. А это значит, что в него встроено множество знаний — как о вычислениях, так и обо всем в мире. На сегодняшний день Wolfram Language охватывает тысячи областей знаний реального мира — начиная от стран и фильмов до компаний и планет. Всё новые данные поступают в главную облачную базу знаний Wolfram, и мы тщательно курируем данные о том новом, что появляется в мире (кто знал, например, что в Австрии появились недавно новые административные подразделения?). Многие эти данные доступны в Wolfram|Alpha. Но только в Wolfram Language данные оживают для полноценных вычислений — и тогда становятся очевидными все те усилия, которые мы вкладываем в обеспечение согласованности и последовательности всей системы.
Мы постоянно работаем над тем, чтобы расширить сферу знаний, которые охватываются Wolfram Language. Те несколько направлений, над которыми мы работали на протяжении многих лет, в 11-й версии, наконец, готовы к работе. Особенно сложно было с данными по анатомии. Однако в 11-й версии вы увидите подробные 3D-модели всех значимых структур человеческого тела. Вы сможете увидеть, как сложные кости ноги прилегают друг к другу. И вы сможете сделать расчеты. Или напечатать их в 3D. Вы сможете изучить сеть артерий вокруг сердца. Должен сказать, что, когда я исследовал это, я более чем когда-либо был поражен уровнем морфологической сложности, присущей человеческому телу. Однако теперь мы можем легко делать расчеты в этой области. Для их обслуживания появились новые, и, возможно, неожиданные функции, — такие, как AnatomyPlot3D. Безусловно, с ними еще придется поработать: к примеру, наши анатомические данные — это только данные »среднего взрослого мужчины», а суставы не могут двигаться, и т. д.
Совершенно иная область данных дорабатывается также в настоящее время в Wolfram Language — это еда. В этой области много сложностей. Во-первых, онтологические проблемы. Что такое яблоко? Есть общее понятие — «яблоко», а также существует множество специфических типов яблок. Также встает вопрос определения «количества еды». Чашка клубники. Три яблока. Четверть фунта. Нам потребовалось много лет работы, чтобы получить надежный символьный способ отображения продуктов, с помощью которого мы можем сразу вычислить питательные свойства и много чего еще.
Еще одна долгожданная новинка — исторические данные по странам. У нас имелись данные о странах в новейшее время (как правило, с 1960-х или 1970-х гг.). А что насчет более раннего периода? Что насчет Пруссии? Что можно сказать о Римской империи? В общем, в 11-й версии мы наконец получили по крайней мере приблизительную информацию о границах всех серьезных стран на протяжении всей истории. Таким образом, посредством Wolfram Language можно сделать расчеты относительно подъема и падения империй.
Говоря об истории, хочется отметить небольшое, но очень полезное дополнение к 11-й версии: исторические данные о частоте употребления слов. Просто получите с помощью функции WordFrequencyData временной ряд частот употребления слов, и вы узнаете, как много людей говорили о слове «война» (или «турнепс») в разное время. Почти каждый график — это урок истории.
Еще одна удобная функция из 11-й версии — WikipediaData, которая по запросу выдает любую статью из Википедии (или различные виды данных, которые в ней содержатся). Также есть функция WolframLanguageData, которая позволяет получать вычисляемые данные о самом языке Wolfram: примеры, приведенные в документации, связи между функциями и так далее.
Во многих сферах мы в основном имеем дело со статическими данными (»Какова плотность золота? »;»Каким было население Лондона в 1959 году? »). Но есть и другие сферы, в которых интерес к статическим данным невелик. В 11-й версии есть несколько новых примеров. Например, данные о смертности людей (»Какова вероятность умереть в промежутке между возрастом X и возрастом Y? »), стандартные данные об океанах (»Какое давление на глубине X? »), данные о энергии торможения радиоактивных частиц в веществе (radioactive stopping power) и данные о росте человека —, а также сведения о всей Вселенной согласно стандартной космологической модели.
Кроме того, в 11-й версии появляются такие функции, как WeatherForecastData (предсказание погоды в любой точке мира) и MathematicalFunctionData (база данных о математических формулах, содержащая сотни тысяч математических формул, представлений функций и пр.). О, а еще данные о покемонах и много других полезных вещей.
Вычисления с реальными объектами
Одной из самых мощных возможностей Wolfram Language является его способность производить непосредственные вычисления с реальными объектами. США, или Россия, или даже ящерица, — для Wolfram Language это просто объекты, которыми можно манипулировать в качестве символьных конструкций с использованием общей символьной парадигмы языка. Сами объекты не имеют значения; они просто символы. Но их свойства могут иметь значения, скажем, вычисление свойства «Population» у entity [[USA]] даст 322 млн.
Однако давайте предположим, что мы хотим не просто взять некоторый объект (например, США) и найти значение его свойств. Скажем, вместо этого мы хотим найти объекты с определенными свойствами и значениями. Скажем, мы хотим найти 5 крупнейших стран в мире по численности населения. В 11-й версии мы можем сделать это по-новому. Вместо того, чтобы указать конкретный явный объект, мы указываем вычисление, которое неявно определяет класс объектов. Так, например, мы можем получить список 5 крупнейших по численности населения стран вот так:
TakeLargest[5] — операторная форма новой функции, работающий с самыми большими элементами в списке. Неявные объекты в конечном итоге часто используют операторные формы — как в запросах Dataset. И в некотором смысле они используют символьный характер Wolfram Language, потому что они работают с функциями, которые определяют их как данные.
Механизм объектов и свойств и неявных объектов работает для всех различных типов объектов, которые существуют в языке Wolfram. Однако начиная с 11-й версии он не ограничивается встроенными типами объектов. Новая конструкция, которая называется EntityStore, позволяет определять собственные типы объектов, а также указывать их свойства и значения и так далее, а затем использовать их в любых вычислениях.
Подобно тому, как Dataset является мощным иерархическим обобщением типичных понятий баз данных, EntityStore является своего рода символическим обобщением типичной реляционной базы данных. И если вы создали сложный объект EntityStore, вы можете просто использовать функцию CloudDeploy, чтобы развернуть его в облаке и использовать, когда захотите.
Передовые возможности географических вычислений и визуализаций
География — один из аспектов «знаний о реальном мире». Но Wolfram Language не просто имеет доступ к подробным географическим данным (для Земли, Луны, Марса и даже Плутона); он может также осуществлять вычисления с этими данными. В его арсенале — колоссальная коллекция мгновенно вычислимых гео проекций и все настройки для поддержки детальной геодезии. Помните сферическую тригонометрию? Wolfram Language не только знает, что Земля представляет собой сферу, но и, используя фактическую форму Земли, правильно вычисляет расстояния, строит области и так далее на карте с произвольными проекциями.
Если говорить о создании карт, то Wolfram Language теперь имеет доступ не только к карте улиц всего мира, но и к таким вещам, как исторические границы стран, а также к спутниковым снимкам, — с низким разрешением (как минимум). С учетом карт улиц появляется новый важный класс возможных вычислений: туристических направлений (и времени поездки) откуда угодно и куда угодно.
Не забудем про сложные задачи математического анализа и теоретической физики…
В 11-й версии во всех областях Wolfram Language появилось много новых возможностей. Однако они доступны теперь и в сферах, традиционных для Mathematica, — например, математического анализа.
Например, есть функции (вроде DEigenvalues) для работы с собственными числами и функциями дифференциальных операторов для обыкновенных дифференциальных уравнений и уравнений в частных производных. Чтобы сделать это возможным, необходим огромный стек алгоритмических технологий, и мы уже более 25 лет движемся в эту сторону. Важно, что это не тот случай, когда необходимо ставить ту или иную задачу с помощью детально проработанных знаний численного анализа. Здесь вы определяете только уравнения и их граничные условия — и система автоматически выясняет, как их решить.
Еще в 1976 году я написал программу на Fortran, предназначенную для поиска собственных функций уравнения Шредингера для физики элементарных частиц, которую я изучал. В 1981 году я писал программы на C, чтобы сделать то же самое для некоторых уравнений релятивистской квантовой механики. Я терпеливо ждал того дня, когда я смогу просто вбить эти задачи и сразу же получить ответы. И сейчас это стало возможным.
Конечно, в 11-й версии все это носит гораздо более общий характер. Я имел дело с простыми граничными условиями;, но в 11-й версии для того, чтобы настроить граничные условия, можно использовать весь геометрический подъязык Wolfram Language — и все данные, которые нам доступны. Так что найти собственные поверхности «барабана» любой формы — например, в форме США, — совсем несложно.
В данном случае у нас нет никакого выбора, кроме как делать все вычисления численно. Тем не менее, в 11-й версии скоро станет возможным искать собственные числа и функции дифференциальных операторов аналитически. В 11-ю версию также добавлены некоторые новые возможности для решения в общем виде (аналитически) дифференциальных уравнений в частных производных. В частности, у нас был большой проект R&D, который подвел нас теперь к той точке, в которой мы можем найти символьное решение практически для любого дифференциального уравнения в частных производных, которое может появиться в любой научной работе или учебнике (если оно вообще имеет аналитическое решение).
Еще в 1979 году, когда я создал предшественника системы Mathematica (см. пост на Хабре «Краткая история появления Mathematica»), я составил список вещей, которые, как я надеялся, мы бы в конце концов в состоянии были бы осуществить. Один из пунктов этого списка — решение интегральных уравнений. Что ж — рад сообщить, что 37 лет спустя, мы, наконец, получили стек алгоритмических технологий, позволяющий сделать это возможным, и в 11-й версии представлены решения многих классов интегро-дифференциальных уравнений.
Есть и еще кое-что — например, построение функций Грина для дифференциальных уравнений. И, наконец, долгожданная (по крайней мере, для меня) функция интегрального преобразования Меллина (оно было моим фаворитом с тех пор, как стало центром моей статьи по физике частиц в 1977 году).
Мы вложили много сил в то, что можно назвать »современным матанализом» — те его аспекты, которые необходимы для поддержки областей вроде машинного обучения. Теперь у нас есть более эффективные и надежные методы минимизации, а также сложная байесовская минимизация, предназначенная для неконтролируемого машинного обучения.
Образование
Дифференциальные уравнения в частных производных — сложные с математической точки зрения, что отражается на применении их на практике в физике и технике и так далее. Но как насчет базовой математики, соответствующей уровню школьного образования? Что ж — в течение длительного времени Mathematica вполне охватывала этот уровень. Но, поскольку наш стек алгоритмических технологий расширился, даже для более элементарной математики стали возможны некоторые новые вещи.
В качестве одного из примеров можно привести автоматическую обработку разрывов, асимптот и т. д. на графиках функций. Так что теперь, к примеру, функция Tan[х] строится идеальным «школьным» способом, без разрывов от –∞ к +∞. В случае с функцией Tan[х] все довольно просто. Однако внутри есть некоторые серьезные алгоритмические технологии, предназначенные для работы с намного более сложными функциями.
И, кстати, в новой версии есть кое-что еще более масштабное — это функция MathematicalFunctionData: доступ к сотням тысяч отношений и свойств математических функций — в каком-то смысле это инкапсуляции многих веков математических исследований (см. пост на Хабре «Вычисляемые знания и будущее чистой математики») с целью сделать их легкодоступными для вычислений.
В последнее время мы используем Wolfram Language как способ обучения алгоритмическому мышлению на всех уровнях. И, среди прочего, мы хотели убедиться, что любое математическое вычисление, c которым сталкиваются в начальной школе, можно действительно элементарно осуществить с помощью Wolfram Language. Поэтому у нас есть такие маленькие функции, как NumberExpand — она берет число, скажем, 123 и расписывает его в форме {100, 20, 3}; также мы добавили функции, такие, как RomanNumeral, и другие.
И — отчасти как дань уважения наследию языка Logo, — мы создали функцию AnglePath — своего рода промышленный масштаб «черепашьей графики (turtle graphics)», которая может быть полезна не только для начального образования, но и для серьезного моделирования — к примеру, случайных блужданий.
Совмещение всех функций в одно целое
Одна из главных целей языка Wolfram Language — сделать так, чтобы всё легко работало совместно. А в 11-й версии есть некоторые новые примеры ее достижения.
Временные ряды, например, в настоящее время работают непосредственно с арифметикой. Таким образом, вы можете взять два временных ряда, скажем, давления воздуха, а потом просто вычесть их. Конечно, было бы проще, если бы все временные точки в серии выстроились, однако в 11-й версии это и не нужно: Wolfram Language автоматически обрабатывает нерегулярные временные ряды.
Другой пример касается единиц измерения. В новой версии статистические распределения на сегодняшний день беспрепятственно работают с единицами измерения. Таким образом, нормальное распределение может иметь не только дисперсию 2,5, но и дисперсию 2,5 метра. Все расчеты, и преобразование единиц измерения обрабатываются полностью в автоматическом режиме.
Геометрия также была интегрирована в более крупные части системы. Те вычислители, которые раньше просто брали переменные, могут теперь оперировать произвольными областями. Еще одна новая функция — ImageMesh — связывает изображения с областями: создает геометрическую сетку из любого изображения. Так, например, если вы хотите, можете сделать серьезные геометрические вычисления вашей любимой картинки с котиком.
Еще один пример: случайные объекты. RandomInteger и RandomReal — это старые функции. В 8-й версии была представлена функция RandomVariate для того, чтобы создать набор чисел, которые имеют заданное вероятностное распределение. Затем в 9-й версии появилась функция RandomFunction, предназначенная для генерации функций из случайных процессов. В 11-й версии появилось еще больше функций для работы со случайностью — я говорю о функции RandomPoint, которая создает набор точек, случайно распределенных в любой области (одно-, двух-, трехмерных и многомерных). Также появилась функция RandomEntity, которая выбирает случайный объект из встроенной базы курируемых данных, а также функция RandomWord, необходимая для исследований естественного языка;, а еще это хороший способ проверить ваш словарный запас — можно выбрать слова из большого списка языков… И, наконец, в 11-й версии появилась важная новая область случайные матрицы — реализованная со всей глубиной и полнотой, которые мы сделали визитной карточкой системы Mathematica и Wolfram Language.
Визуализация
Одним из серьезных достижений Mathematica и языка Wolfram стало включение визуализации в повседневную работу. Нашей целью всегда было максимально автоматизировать и визуализировать как можно больше. И в 11-й версии представлена теперь целая коллекция новых функций автоматической визуализации.
Есть очень гибкая функция WordCloud для построения облаков из слов, которые позволяют визуализировать текст и строки. Есть функция TimelinePlot для визуализации событий во времени. Есть AudioPlot, которые могут визуализировать аудио различной длины. Есть функция Dendrogram, которая использует методы машинного обучения для демонстрации иерархической кластеризации изображений, текста или любого другого вида данных. Есть GeoHistogram для построения географических гистограмм. Функция TextStructure графически изображает грамматику английских предложений. И есть функция AnatomyPlot3D, демонстрирующая элементы человеческого тела (используя символические спецификации, поскольку нет никаких явных координат).
Что еще можно визуализировать? Есть одна вещь, которую я много визуализировал (особенно в моих работах в области фундаментальной науки) — это правила для простых программ вроде клеточных автоматов, машин Тьюринга, правил подстановки и пр. А в 11-ю версию мы добавили функцию RulePlot для автоматической визуализации правил в самых разных стилях.
Еще одна давняя проблема визуализации заключалась в автоматизации 3D распределения данных. Основная сложность заключается в том, чтобы «увидеть» объем в 3D. Но в новой версии у нас есть теперь куча функций, которые решают это по-разному, часто — делая срезы в местах, которые определяются нашей системой вычисляемой геометрии.
Еще одно важное направление автоматизации в области визуализации — маркировка. В 11-й версии доступна функция Callout, указывающая выноски для точек, линий и областей (у нас уже есть функции подписи, подсказки и так далее). Есть такой способ делать сноски — всегда помещать их, например, слева. Однако на практике это не очень удобно, потому что они начинают рано или поздно путаться. Вместо этого в 11-й версии мы сделали нечто гораздо более сложное, включающее в себя алгоритмическую выкладку сносок для достижения эстетических и коммуникационных целей.
От строк к тексту
С пом