Построение графиков wolfram alpha: Графики функций одной переменной в Wolfram|Alpha

Мозг из вольфрама В Сети появится универсальный вычислитель ответов: Интернет и СМИ: Lenta.ru

Стивен Вольфрам, ученый, разработавший популярную программу компьютерной алгебры Mathematica, в мае запустит сервис, который перевернет представления о поиске информации в интернете. Ресурс Wolfram Alpha будет вычислять ответы на вопросы, заданные на естественном языке.

Что значит вычислять? Обычный поисковик ищет ответы на запрос в уже существующей информации. Если никто раньше на этот вопрос, заданный в схожей форме, не отвечал, пользователь уйдет, несолоно хлебавши.

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

Wolfram Alpha может, например, не только отвечать на вопросы вроде ″Где находится Египет?″ (простые поисковики с таким научились справляться), но и ″Где завтра в полдень будет находиться МКС?″. Для того чтобы ответить на последний вопрос, нужно понять, когда наступит завтра, а также иметь математическую модель движения МКС или рассчитать ее, исходя из имеющихся о станции данных. Обычные поисковики этим не занимаются. Wolfram Alpha для этого создан.

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

Так, например, британская компания True Knowledge уже открыла одноименный поисковик фактов, распознающий вопросы, заданные на английском языке. Он может ответить на вопросы вроде ″Сколько лет Стиву Джобсу?″, ″Каково население Соединенных Штатов?″ и ″Который сейчас час в Москве?″. На более сложные, вроде просьбы узнать, сколько получится, если население США поделить надвое, True Knowledge отвечать не умеет. По словам основателя True Knowledge, именно они являются ближайшим аналогом Wolfram Alpha.

Создатели другого поисковика, PowerSet, попытались формализовать утверждения, находящиеся в энциклопедии Wikipedia и базе данных фактов FreeBase. Как таковых ответов PowerSet не дает, но предоставляет в меру сил выдержки из энциклопедических источников. Другими словами, ни о каком вычислении ответов речи не идет.

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

Первым очевидцем стал Нова Спивак (Nova Spivack), один из основоположников концепции семантического веба, которому Вольфрам продемонстрировал систему. Спивак изложил свои впечатления в восторженной статье. Он сравнивает Wolfram Alpha с электронным мозгом, успокаивает читателей, говоря, что система не похожа на компьютер HAL из ″Одиссеи 2001 года″, и утверждает, что не нашел изъянов в механизме обработки запросов на естественном языке.

Гораздо более объективно свои впечатления изложил Даг Ленат (Doug Lenat), основатель проекта искусственного интеллекта Cyc, призванного упорядочить повседневные знания и обучить программу отвечать на соответствующие вопросы, рассуждая, как человек. Ленат потратил на изучение Wolfram Alpha два часа, беседовал с Вольфрамом и выяснил несколько интересных подробностей о системе.

Во-первых, поисковиком Wolfram Alpha можно назвать с большой натяжкой. Он в крайне редких случаях обращается к внешним источникам данных. Команда Стивена Вольфрама потратила несколько лет на создание базы данных фактов, а также большого числа математических моделей. Когда пользователь задает вопрос, данные для ответа будут браться именно из этой базы.

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

В-третьих, ответ выводится в виде диаграмм, таблиц и графиков. Например, если ввести ″gdp″ (ВВП), то на экране появится график изменения ВВП страны, где находится пользователь, за последние тридцать лет. Если ввести ″gdp France / Germany″, будет выведен график соотношения французского ВВП к немецкому за тот же срок.

В-четвертых, универсальный вычислитель ответов вычисляет далеко не все, и не вполне дружит с логикой. Ленат приводит следующий пример: на вопрос ″с какой скоростью растут волосы?″ Wolfram Alpha не ответит, но при запросе ″10 сантиметров в год″ выведет длинный список вещей и явлений, так или иначе связанных с этой скоростью. В этом списке есть и скорость волос, но сопоставить ее с заданным вопросом Wolfram Alpha не может. Другой пример — Wolfram Alpha может указать поголовье скота в Чикаго, но не число млекопитающих.

Особо ехидные наблюдатели уже заготовили списки своих вопросов для майского тестирования, вроде ″Кто был папой римским в 1066 году?″, ″Сколько голов забил Пеле?″ и ″Сколько раз Мадонна выходила замуж?″. True Knowledge, по крайней мере, не смог ответить ни на один.

Трудно сказать, какие перспективы ждут новый проект. Очень часто разработка математиков в конечном итоге оказывается полезна только математикам. Кроме того, неясно, как Стивен Вольфрам сотоварищи собираются проверять накопленные системой факты. А главное, им предстоит научить пользователей правильно задавать вопросы.

Исследование функций и построение графиков

Похожие презентации:

Пиксельная картинка

Информационная безопасность. Методы защиты информации

Электронная цифровая подпись (ЭЦП)

Этапы доказательной медицины в работе с Pico. Первый этап

История развития компьютерной техники

От печатной книги до интернет-книги

Краткая инструкция по CIS – 10 шагов

Информационные технологии в медицине

Информационные войны

Моя будущая профессия. Программист

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

3, pink
Исследование функций
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Область определения функции в Wolfram|Alpha
Как найти область определения функции f(x) и точки ее разрыва в
Wolfram|Alpha
Точки пересечения графика функции f(x) с осью Ox
Как найти точку пересечения графика функции f(x) с осью Oy в
Wolfram|Alpha
Как найти множество значений функции f(x) с помощью Wolfram|Alpha
Как найти асимптоты графика функции f(x)
Координаты точек пересечения графика функции f(x) с ее асимптотами
Поведение функции f(x) возле ее вертикальных асимптот
Как найти критические точки первого рода функции f(x)
Как найти интервалы монотонности функции f(x) в Wolfram|Alpha
Как найти точки экстремума функции f(x) в Wolfram|Alpha
Как вычислить значения функции в точках ее экстремума в WolframAlpha
Как найти критические точки второго рода функции f(x) в Wolfram|Alpha
Область определения функции в
Wolfram|Alpha
Найти область определения функции:
domain sqrt(16-x^2)/sin(x))
Найти область определения функции:
Точки разрыва функции
• discontinuities f(x)
• real roots of q(x), где q(x) – знаменатель
рациональной дроби
• q(x)!=0 over reals найдутся нули
знаменателя
Точки пересечения графика
функции f(x) с осью Ox
• real roots of f(x)
• real solve f(x)
Как найти точку пересечения
графика функции f(x) с осью Oy
• solve f(x), x=0
Найти множество значений
функции f(x)
• range f(x)
Найти асимптоты графика функции f(x)
asymptotes f(x)
vertical asymptotes f(x), horisontal asymptotes
f(x) и oblique asymptotes f(x)
Найти асимптоты графика функции f(x)
Горизонтальные асимптоты можно найти вычислив пределы
функции f(x) на бесконечности. Для этого служат запросы вида:
lim f(x) x->-oo и lim f(x) x->+oo. Вместо символа бесконечности
можно использовать слово «infinity» или «oo»
Наклонные асимптоты также можно найти пошагово,
воспользовавшись уравнением наклонной асимптоты
параметрами которого являются угловой коэффициент k и
свободный член b
здесь используются такие запросы: для отыскания k служит запрос
lim f(x)/x x->oo,
для отыскания b – запрос
lim (f(x)-kx) x->oo
(вместо k нужно подставить его значение, найденное на
предыдущем шаге)
Координаты точек пересечения графика
функции f(x) с ее асимптотами
Сначала найдем абсциссы точек пересечения
графика функции f(x) и ее асимптоты g(x).
Для этого используется запрос
real roots of f(x)=g(x)
ординаты точек с найденными абсциссами x=a, b, c,
… используем запрос
f(x) where x=a, b, c,
Координаты точек пересечения
графика функции f(x) с ее асимптотами
• Сначала найдем абсциссы точек
пересечения графика функции f(x) и ее
асимптоты g(x). + (правосторонний предел)
Найти критические точки первого рода
функции f(x)
На втором этапе для исследования функции уже применяется
производная. Цель второго этапа — найти критические точки
первого рода, интервалы возрастания и убывания функции, точки
экстремума и экстремальные значения функции, угловые точки
графика функции (используется первая производная).
Рассмотрим первое задание второго этапа (оно восьмое по счету в
общей схеме исследования функции): найти критические точки
первого рода (точки, где производная функции f(x) равна нулю или
не существует).
• Сначала находим производную функции f(x), используется
запрос: d/dx f(x)
• Далее находим действительные нули производной,
используется запрос: real roots of f`(x)
• real roots of d/dx [f(x)]
Найти интервалы монотонности
функции f(x)
• Сначала следует найти производную
данной функции
• Затем ищем непосредственно интервалы
знакопостоянства производной f`(x),
которые и являются интервалами
монотонности данной функции, для этого
используются запросы на решение
неравенств: solve f`(x)>0 (интервалы
возрастания) и solve f`(x)<0 (интервалы
убывания). 2 f(x) или d2/dx2 f(x)
2. Далее находим действительные нули
второй производной, используется запрос
вида real roots of f`»(x).
* Попробуйте самостоятельно определить
интервалы выпуклости и вогнутости
функции
Исследовать функции
3
x
f ( x)
2( x 1) 2
3 3 2
y
x ( x 5)
10
3 2x
y
( x 2)2
y x e
3 3
y
( x 1)2 ( x 2)
10
3 x
1
1
3 3
3
x
2
y
(
x
2)
e
y
( x 1) ( x 2)
2
10
1 3 55 2
y x
x
15
6
1
y ( x 1)2 3 x 1
5
x 2x 1
y
6( x 2)
2
y x 3x 2
3
2
x
y
2ln x
Исследовать функции
1
3
y x 2 x
2
1 3 x 1
y
xe
2
1 3
5 2
y
x 25 x
30

English     Русский Правила

Построение функций и графиков в Wolfram|Alpha — блог Wolfram|Alpha

Построение функций в декартовой плоскости — это такая простая задача с Wolfram|Alpha: просто введите функцию, которую вы хотите построить, и через несколько секунд вы получите красивый результат. Если вы чувствуете себя смелым, введите многомерную функцию, и результатом будет трехмерный декартов график. Wolfram|Alpha, безусловно, не ограничивается декартовым построением графиков; у нас есть функциональные возможности для создания числовых линий, 2D и 3D полярных графиков, 2D и 3D параметрических графиков, 2D и 3D контурных графиков, неявных графиков, логарифмических графиков, логарифмических графиков, матричных графиков, графиков поверхности вращения, графиков областей, списка графики, круговые диаграммы, гистограммы и многое другое. Кроме того, в Wolfram|Alpha мы можем генерировать специализированные графики для иллюстрации асимптот, точек возврата, максимумов, минимумов, точек перегиба, седловых точек, решений обыкновенных дифференциальных уравнений, полюсов, собственных значений, разложений в ряды, определенных интегралов, двумерных неравенств, интерполяционных полиномов, наименьших -квадраты лучше всего подходят и многое другое. Давайте взглянем на функции построения графиков в Wolfram|Alpha, некоторые из которых недавно улучшены!

Мы начнем с двухмерных декартовых графиков.

Здесь мы наносим sin(√7 x )+19cos( x

) для x между -20 и 20.


действительной и мнимой частей.

В обоих этих примерах мы задали Wolfram|Alpha горизонтальный диапазон графика. Что произойдет, если мы не дадим Wolfram|Alpha диапазон?

Мы по-прежнему получаем сюжет со всеми его определяющими характеристиками. Одной из уникальных особенностей Wolfram|Alpha является функция автоматического угадывания соответствующего диапазона графиков для одномерных и двумерных функций. Вот еще пример:

До сих пор мы говорили Wolfram|Alpha, что специально запрашиваем участок. Если мы просто введем одномерное выражение без префикса «график», то мы всегда будем получать декартов график в дополнение к ряду других фрагментов информации. Попробуйте:

Против:

Одно важное отличие состоит в том, что размеры изображения больше, если вы специально запрашиваете сюжет.

Вы также можете отображать несколько функций одновременно.

92 cos( x ) для x между -6 и 6 и y между -2 и 2.

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

Во всех этих примерах Wolfram|Alpha вернул контурный график в дополнение к 3D-графику. Хороший способ увидеть связь между 3D-графиками и контурными графиками — нажать кнопку «Показать контурные линии». Обратите внимание, что для трехмерных и контурных графиков всегда будет использоваться один и тот же диапазон графиков.

Все трехмерные графики были созданы с использованием функции

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

Теперь у вас есть возможность ознакомиться с графическими возможностями Wolfram|Alpha в 2D и 3D плоскостях. Все еще не убеждены? Попробуйте построить свою любимую функцию в Wolfram|Alpha и обязательно поделитесь с нами своими результатами!

Создайте свой следующий проект с Wolfram Alpha API и Python | Martin Heinz

Любой, кто когда-либо испытывал затруднения с математикой, знает Wolfram Alpha и, вероятно, был спасен его способностью решать любые уравнения, строить графики любой функции или визуализировать логические схемы. Вольфрам Альфа может; однако делать гораздо больше, включая химию, лингвистику или историю, и, что наиболее важно, он может дать вам все ответы, используя свой общедоступный API. Итак, в этой статье мы рассмотрим, как вы можете использовать его, чтобы отвечать на простые вопросы, решать математические задачи, отображать графики или даже описывать последовательности ДНК!

Настройка

Wolfram Alpha API является бесплатным (для некоммерческого использования), но нам по-прежнему необходимо получить ключ API (AppID) для выполнения запросов к конечным точкам API. Чтобы получить ключ API, мы сначала создадим Wolfram ID по адресу https://account.wolfram.com/login/create. Когда учетная запись создана, мы можем перейти к https://developer.wolframalpha.com/portal/myapps/index.html, нажать кнопку

Зарегистрироваться, чтобы получить свою первую кнопку AppID , заполнить диалоговое окно Получить новый AppID . После этого нам будет представлен API-ключ, который называется 9.0174 AppID здесь, который мы можем проверить с помощью следующего примера запроса:

из pprint импортировать pprint
запросы на импорт
импорт ОС
импортировать urllib.parse
appid = os.getenv('WA_APPID', '...')
query = urllib.parse.quote_plus("продолжительность жизни комара")
query_url = f"http://api.wolframalpha.com/v2/query?" \
             f"приложение={приложение}" \
             f"&input={запрос}" \
             f"&format=открытый текст" \
             f"&output=json"
г = запросы.получить(запрос_url).json()
data = r["queryresult"]["pods"][0]["subpods"][0]
источник данных = ", ".
join(данные["источники данных"]["источник данных"]) микроисточник = данные["микроисточники"]["микроисточники"] открытый текст = данные["открытый текст"] print(f"Результат: '{открытый текст}' из {источника данных} ({микроисточник}).") # Результат: '(9от 0,2 до 11, от 52 до 60) дней из AmazingNumbers, TheWikimediaFoundationIncWikipedia (SpeciesData).

Приведенный выше код использует Wolfram|Alpha Full Results API , чтобы узнать, какова продолжительность жизни комара. Для этого он делает запрос GET к http://api.wolframalpha.com/v2/query с параметрами, указывающими наш AppID для аутентификации, вопрос в поле ввода , параметр формата как открытый текст (вместо изображения) и, наконец, тип вывода — JSON (вместо XML по умолчанию).

Мы просматриваем результат как словарь, ищем интересные поля для вывода. Возвращенный JSON (или XML) может быть довольно сложным, и действительно самый простой способ его проанализировать — распечатать его и найти там любые полезные поля.

Урезанный пример ответа на приведенный выше запрос будет выглядеть примерно так:

{'queryresult': {'ошибка': False,
                 'стручки': [{'ошибка': False,
                           'типы выражений': {'имя': 'По умолчанию'},
                           'id': 'Результат',
                           'numsubpods': 1,
                           «позиция»: 100,
                           «первичный»: правда,
                           'сканер': 'Данные',
                           'subpods': [{'источники данных': {'источник данных': ['AmazingNumbers',
                                                                       'Фонд Викимедиа, ИнкВикипедия']},
                                        'микроисточники': {'микроисточник': 'SpeciesData'},
                                        'открытый текст': '(9.2 до 11, 52 до 60) '
                                                     'дни',
                                        'заголовок': ''}],
                           'название': 'Результат'}],
                 'успех': Истина}}
 

Doing Math

Самая полезная часть Wolfram Alpha (на мой взгляд) — это возможность решать сложные математические задачи. Итак, давайте попробуем посчитать с помощью API:

уравнение = "7 + 2x = 12 - 3x"
запрос = urllib.parse.quote_plus(f"решить {уравнение}")
query_url = f"http://api.wolframalpha.com/v2/query?" \
            f"приложение={приложение}" \
            f"&input={запрос}" \
            f"&includepodid=Результат" \
            f"&output=json"
г = запросы.получить(запрос_url).json()
data = r["queryresult"]["pods"][0]["subpods"][0]
открытый текст = данные["открытый текст"]
print(f"Результатом {уравнения} является '{открытый текст}'.")
# Результат 7 + 2x = 12 - 3x равен 'x = 1'.
 

API Full Results , показанный в предыдущем разделе, не только отвечает на некоторые любопытные вопросы, но также выполняет математические операции (и почти все). Чтобы API знал, что мы хотим выполнить математику — в данном случае — решить уравнение, нам нужно добавить к фактическому уравнению слово решить . Помимо самого ввода, запрос очень похож на запрос в предыдущем разделе. Еще одна вещь, которая добавлена ​​к этому параметру includepodid , сообщает API, что в данном случае нам нужно только Результат pod должен быть включен в ответ. «А что такое стручок?» , спросите вы.

Каждый результат Wolfram Alpha (как веб-сайт, так и API), как правило, включает несколько категорий данных. Это может быть, например, график, изображение, пошаговое решение или таблица. Каждый из них принадлежит своему собственному разделу под названием pod , который, в свою очередь, включает подблока , которые содержат отдельные фрагменты данных. Учитывая, что каждый ответ иногда может включать в себя даже 10 или около того подов, желательно описать, что мы хотим получить от API. Для этого — podtitle и более надежный includepodid — можно использовать параметры, как показано выше.

Таким образом, отфильтрованный ответ на приведенный выше запрос будет выглядеть так:

{'queryresult': {'pods': [{'error': False,
                           'типы выражений': {'имя': 'По умолчанию'},
                           'id': 'Результат',
                           'numsubpods': 1,
                           «позиция»: 100,
                           «первичный»: правда,
                           'сканер': 'Решить',
                           'состояния': [{'ввод': 'Результат__Пошаговое решение',
                                       'имя': 'Пошаговое решение',
                                       'шаг за шагом': Истина}],
                           'subpods': [{'img': {'alt': 'x = 1',
                                                'src': 'https://www5a. wolframalpha.com/Calculate/MSP/...?MSPStoreType=image/gif&s=50',
                                                'темы': '1,2,3,4,5,6,7,8,9,10,11,12',
                                                'название': 'х = 1'},
                                        «открытый текст»: «х = 1»,
                                        'заголовок': ''}],
                           'название': 'Результат'}]}}
 

И для сравнения тот же (но графический) результат, но со всеми модулями будет выглядеть так:

Wolfram Alpha может быть отличным учебным ресурсом благодаря способности показывать не только результаты, но и все этапы вычислений, а API может сделай это тоже. Чтобы получить пошаговое решение для запроса, нам нужно включить еще один параметр с именем podstate , который указывает изменение состояния модуля. Это заменит исходный модуль модифицированной версией, которая может быть, например, большим количеством цифр для десятичного числа, такого как Pi ( DecimalApproximation ), расширенными данными о погоде (больше дней/месяцев/лет) или, как в нашем случае, шагами к уравнению решение:

уравнение = "7 + 2x = 12 - 3x"
запрос = urllib. parse.quote_plus(f"решить {уравнение}")
query_url = f"http://api.wolframalpha.com/v2/query?" \
            f"приложение={приложение}" \
            f"&input={запрос}" \
            f"&scanner=Решить" \
            f"&podstate=Результат__Пошаговое+решение" \
            "&формат=открытый текст" \
            f"&output=json"
г = запросы.получить(запрос_url).json()
data = r["queryresult"]["pods"][0]["subpods"]
результат = данные[0]["открытый текст"]
шаги = данные[1]["открытый текст"]
print(f"Результатом {уравнения} является '{result}'.\n")
print(f"Возможные шаги к решению:\n\n{шаги}")
# Результат 7 + 2x = 12 - 3x равен 'x = 1'.
#
# Возможные шаги решения:
#
# Найдите х:
# 2 х + 7 = 12 - 3 х
# Добавьте 3 x к обеим сторонам:
# 3 х + 2 х + 7 = (3 х - 3 х) + 12
# 3 х - 3 х = 0:
# 3 х + 2 х + 7 = 12
# Группировка подобных терминов, 3 x + 2 x + 7 = (2 x + 3 x) + 7:
# (2 х + 3 х) + 7 = 12
# 2 х + 3 х = 5 х:
# 5 х + 7 = 12
# Вычесть 7 с обеих сторон:
# 5 х + (7 - 7) = 12 - 7
# 7 - 7 = 0:
# 5 х = 12 - 7
#12 - 7 = 5:
# 5 х = 5
# Разделим обе части 5 x = 5 на 5:
# (5 ​​х)/5 = 5/5
# 5/5 = 1:
# х = 5/5
# 5/5 = 1:
# Ответ: х = 1
 

Рендеринг Mathematical Markdown

Один изящный прием, для которого вы можете использовать Wolfram Alpha API, — это визуализация MathML. Если вы не знакомы с MathML, то вот краткое изложение — MathML расшифровывается как Mathematical Markup Language , это формат на основе XML для LaTeX -подобных математических выражений в веб-браузерах. Несмотря на то, что этот формат существует уже давно, на самом деле он поддерживается только Firefox, что может показаться плохим выбором, но механизм отображения JavaScript под названием MathJax.js позволяет отображать MathML в любом браузере, что делает его хороший выбор, если вы хотите показать действительно красиво выглядящие сложные формулы в LaTeX в вашем веб-приложении или блоге. С учетом сказанного, давайте запросим это!

уравнение = "7 + 2x = 12 - 3x"
запрос = urllib.parse.quote_plus(f"решить {уравнение}")
query_url = f"http://api.wolframalpha.com/v2/query?" \
            f"приложение={приложение}" \
            f"&input={запрос}" \
            f"&scanner=Решить" \
            f"&podstate=Результат__Пошаговое+решение" \
            "&format=mathml" \
            f"&output=json"
г = запросы. получить(запрос_url).json()
data = r["queryresult"]["pods"][0]["subpods"]
результат = данные[0]["mathml"]
шаги = данные[1]["mathml"]
print(f"Результат MathML {уравнения}:\n")
печать (f"{результат}")
print(f"Возможные шаги к решению:\n\n{шаги}")
# Результат MathML 7 + 2x = 12 - 3x:
#
# 
# <мроу>
# <ми>х
# <мо>=
# 1
# 
# 
#
# Возможные шаги решения:
# 
# 
# <метр>
# ...
# 
# 
# 
 

Мы снова используем пример из предыдущего раздела для запроса уравнения с пошаговым решением, но заменяем format=plaintext на format=mathml и аналогичным образом заменяем все остальные вхождения открытый текст на mathml , например результат = данные[0]["mathml"] . Выше вы можете увидеть небольшую часть вывода MathML, предоставленного API, он очень урезан, так как полный вывод очень длинный, но я бы посоветовал вам попробовать выполнить запрос самостоятельно, передать его через MathJax.js и наслаждаться прекрасным LaTeX математических выражений.

Решение булевой алгебры

Другим довольно распространенным вариантом использования Wolfram Alpha является решение булевой алгебры. Как и в случае с базовыми уравнениями, все, что нам нужно сделать, это передать формулу в API, и вот что мы получим в ответ:

.
формула = "((P И (Q ПОДРАЗУМЕВАЕТ R)) ИЛИ S) И T"
запрос = urllib.parse.quote_plus(f"решить {формула}")
query_url = f"http://api.wolframalpha.com/v2/query?" \
            f"приложение={приложение}" \
            f"&input=решить {формула}" \
            f"&output=json" \
            f"&includepodid=Ввод" \
            f"&includepodid=Минимальные формы" \
            f"&includepodid=Плотность правды"
г = запросы.получить(запрос_url). json()
стручки = r["результат запроса"]["стручки"]
выражение = pods[0]["subpods"][0]["plaintext"]
min_forms = "\n".join(pods[1]["subpods"][0]["plaintext"].split("\n")[:-1])
true_density = pods[2]["subpods"][0]["plaintext"].split("=")
print(f"Выражение {выражение}:\n")
печать (f"{min_forms}\n")
print(f"Плотность истины равна {truth_density[0]}, что равно {truth_density[1]}")
# Выражение ((P ∧ (Q подразумевает R)) ∨ S) ∧ T:
#
# ДНФ | (P ∧ ¬Q ∧ T) ∨ (P ∧ R ∧ T) ∨ (S ∧ T)
# КНФ | (P ∨ S) ∧ (¬Q ∨ R ∨ S) ∧ T
# АНФ | (P ∧ T) ⊻ (S ∧ T) ⊻ (P ∧ Q ∧ T) ⊻ (P ∧ S ∧ T) ⊻ (P ∧ Q ∧ R ∧ T) ⊻ (P ∧ Q ∧ S ∧ T) ⊻ (P ∧ Q ∧ R ∧ S ∧ T)
# НЕ | (P ⊽ S) ⊽ (¬Q ⊽ R ⊽ S) ⊽ ¬T
# И-НЕ | (P ⊼ ¬Q ⊼ T) ⊼ (P ⊼ R ⊼ T) ⊼ (S ⊼ T)
# И | ¬(¬P ∧ ¬S) ∧ ¬(Q ∧ ¬R ∧ ¬S) ∧ T
# ИЛИ | ¬(¬P ∨ Q ∨ ¬T) ∨ ¬(¬P ∨ ¬R ∨ ¬T) ∨ ¬(¬S ∨ ¬T)
#
# Плотность истины равна 11/32, что составляет 34,375%.
 

Приведенный выше запрос на самом деле не показывает ничего нового, за исключением конкретных выбранных нами модулей — Input , MinimalForms и TruthDensity . После анализа данных в этих 3 модулях мы можем увидеть вывод, который включает в себя более удобную форму представленной входной формулы, ее другие вычисленные формы (CNF, DNF…), а также плотность истинности как в виде дроби, так и в процентах.

Рендеринг и загрузка графиков

Одним из моих любимых занятий в Wolfram Alpha всегда был рендеринг сложных графиков. Реализация этого даже не требует большого изменения кода, единственное реальное изменение — это выбор модулей и их полей:

функция = "грех x cos y"
запрос = f "сюжет {функция}"
query_url = f"http://api.wolframalpha.com/v2/query?" \
            f"приложение={приложение}" \
            f"&input={запрос}" \
            f"&output=json" \
            f"&includepodid=3DPlot" \
            f"&includepodid=ContourPlot"
г = запросы.получить(запрос_url).json()
стручки = r["результат запроса"]["стручки"]
plot_3d_url = блоки [0]["подблоки"][0]["img"]["src"]
plot_contour_url = модули [1]["подмодули"][0]["img"]["src"]
img_name = "3d_plot. jpg"
img_data = запросы.get(plot_3d_url).content
с open(img_name, 'wb') в качестве обработчика:
    обработчик.write(img_data)
    print(f"Изображение 3D-графика сохранено в {img_name}.")
 

В этом случае мы используем параметр includepodid для выбора модулей 3DPlot и ContourPlot , которые содержат URL-адреса изображений соответствующих графиков в полях img.src . Затем эти графики можно загрузить и записать в двоичном режиме, получая следующее изображение:

Не только математика

На данный момент, я думаю, мы видели достаточно приложений для Wolfram Alpha и математики. Итак, что еще мы можем сделать? В качестве простого примера рассмотрим некоторую последовательность ДНК:

запрос = "AAGCTAGCTAGC"
query_url = f"http://api.wolframalpha.com/v2/query?" \
            f"приложение={приложение}" \
            f"&input={запрос}" \
            f"&scanner=Геном" \
            f"&output=json" \
            f"&includepodid=Длина" \
            f"&includepodid=аминокислотная последовательность" \
            f"&includepodid=Температура плавления" \
г = запросы. получить(запрос_url).json()
стручки = r["результат запроса"]["стручки"]
длина = {
    "название": стручки[0]["название"],
    "value": pods[0]["subpods"][0]["plaintext"]
}
амино_последовательность = {
    "название": стручки[1]["название"],
    "value": pods[1]["subpods"][0]["plaintext"].replace(") ", ")\n")
}
плавление_temp = {
    "название": стручки[2]["название"],
    "value": pods[2]["subpods"][0]["plaintext"]
}
print(f"{длина['название']}: {длина['значение']}\n")
print(f"{амино_последовательность['название']}:\n {амино_последовательность['значение']}\n")
print(f"{melting_temp['название']}: {melting_temp['значение']}")
# Длина: 12 пар оснований
#
# Последовательность аминокислот:
# (5'-3' кадр 1)
# | ААГ | КУА | ГКУ | АРУ
# ↓ | ↓ | ↓ | ↓
# Лис | Леу | Ала | сер
#
# Температура плавления олигонуклеотида: 48,5 °C (градусы Цельсия).
# (в стандартных условиях ПЦР)
 

Мы снова используем ту же конечную точку API, но на этот раз мы отправляем строку, представляющую последовательность ДНК. Вы могли заметить, что нам не нужно было включать ключевое слово перед запросом, как раньше с решить или построить . Что ж, на этот раз вместо ключевого слова мы добавили параметр сканера , который указывает предметную область поискового запроса, в данном случае это Геном . Чтобы узнать, какой сканер вернет релевантные данные для некоторого запроса, проще всего выполнить запрос без сканер и найдите атрибут сканера каждого модуля, имеющего ожидаемые данные.

Последовательности ДНК, очевидно, не единственная интересная вещь, которую вы можете искать. Некоторыми из других интересных тем могут быть, например, история, химия, транспорт или музыка — и это лишь некоторые из них.

Ответы на естественном языке (разговорный)

Если вы ищете только информацию, то примеров и API из предыдущих примеров достаточно. Однако, если вы хотите/нужны более естественно звучащие ответы на ваши вопросы, вы можете использовать Голосовые результаты API :

question = "Какой самый распространенный язык в мире?"
query_url = f"http://api. wolframalpha.com/v1/spoken?" \
            f"приложение={приложение}" \
            f"&i={вопрос}" \
г = запросы.получить(запрос_url)
печать (р.текст)
# Самым распространенным языком по общему количеству говорящих является английский. Общая численность носителей английского языка составляет около 1,3 млрд человек.
 

Запросы для конечной точки v1/речевой очень просты. Все, что нам нужно передать, это AppID и наши вопросы в и параметр. Это дает ответ в виде полного предложения, а не простого факта. Это может быть очень полезно при создании умных чат-ботов или, возможно, в качестве входных данных для механизма преобразования текста в речь.

Чат с API-интерфейсом для разговоров

В качестве своего рода расширения для Spoken Results API , Wolfram Alpha также предоставляет Conversational API , который позволяет вам задавать дополнительные вопросы и, следовательно, общаться с API. Итак, давайте попробуем и спросим кое-что у Wolfram Alpha:

question = "Где находятся Фолклендские острова?"
расположение = "47. 01,16.93"
query_url = f"http://api.wolframalpha.com/v1/conversation.jsp?" \
            f"приложение={приложение}" \
            f"&геолокация={приложение}" \
            f"&i={вопрос}" \
г = запросы.получить(запрос_url).json()
ответ = г["результат"]
ид_беседы = г["идентификатор беседы"]
хост = г["хост"]
print(f"{вопрос}: '{ответ}'")
followup_question = "Как далеко отсюда?"
query_url = f"http://{host}/api/v1/conversation.jsp?" \
            f"приложение={приложение}" \
            f"&conversationID={идентификатор_беседы}" \
            f"&i={followup_question}" \
г = запросы.получить(запрос_url).json()
ответ = г["результат"]
print(f"{followup_question}: '{ответ}'")
# Где находятся Фолклендские острова?: «Фолклендские острова находятся в Южной Америке».
# Как далеко отсюда?: 'Ответ около 13217 километров.'
 

Учитывая, что мы хотим задать несколько вопросов, мы также должны сделать несколько запросов. Первый из них направлен на конечную точку v1/беседа и включает в себя вопросы в параметре i . Мы также указываем наше местоположение с помощью параметра geolocation — это одно из необязательных значений (другие — ip и единиц ), которые могут обеспечить контекст для вопросов. Этот первый запрос в значительной степени делает то же самое, что и Spoken Results API 9.0175 , что означает, что он возвращает информацию в виде полного предложения.

Самое интересное начинается, когда мы задаем уточняющие вопросы. Для этого мы делаем еще один запрос, но на этот раз мы отправляем его на хост, который был предоставлен как часть ответа на первый запрос ( host = r["host"] ). Первый ответ также включал идентификатор разговора , который мы также должны передать API, чтобы узнать, что было сказано до этого.

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

И последнее, на что я хочу обратить внимание, это то, как вопросы и ответы могут быть красиво оформлены и использовать контекст. В этом конкретном примере мы использовали «Как далеко это отсюда?» в качестве дополнительного вопроса, фактически не уточняя, что на самом деле представляет собой «это», или «здесь» . Эта информация была автоматически получена из предыдущего вопроса и параметра геолокации .

Заключение

Эта статья — всего лишь верхушка айсберга в том, что касается информации, доступной в Wolfram Alpha. Эти API можно использовать не только для математики, и я думаю, что это отличная отправная точка для создания крутых ботов, интеллектуальных устройств или голосовых приложений. Несмотря на то, что это не бесплатно для коммерческого использования, вы все равно получаете 2000 запросов в месяц, что достаточно для запуска какого-нибудь классного проекта. Я рекомендую посетить https://products.wolframalpha.com/api/ для получения документации по каждой конечной точке API, а также целевую страницу Wolfram Alpha, на которой показаны все различные темы, которые могут дать вам некоторое представление о том, что вы можете создать с его помощью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *