Подтвердить что ты не робот

Как система, подобная Wolfram Alpha или Mathematica, решает уравнения?

Я создаю веб-язык программирования, частично вдохновленный Prolog и Haskell (не смейтесь).

У него уже довольно много функциональности, вы можете проверить прототип на http://www.lastcalc.com/. Вы можете увидеть источник здесь и прочитать об архитектуре здесь, Помните это прототип.

В настоящее время LastCalc не может упростить выражения или решить уравнения. Вместо того, чтобы жестко кодировать это в Java, я хотел бы улучшить базовый язык, чтобы его можно было расширить, чтобы делать эти вещи, используя только сам язык (как и в Prolog). В отличие от Prolog, LastCalc имеет более мощный алгоритм поиска, Prolog - это "поиск по глубине с обратным трассировкой", LastCalc в настоящее время использует эвристический поиск в первую очередь.

Прежде чем углубиться в это, я хочу больше узнать о том, как другие системы решают эту проблему, в частности Mathematica/Wolfram Alpha.

Я предполагаю, что идея, по крайней мере в общем случае, заключается в том, что вы даете системе кучу правил для манипулирования уравнениями (например, a*(b+c) = a*b + a+c) указать цель (например, изолировать переменную x), а затем освободить ее.

Итак, мои вопросы:

  • Правильно ли мое предположение?
  • Какова стратегия поиска для применения правил? например. сначала глубина, сначала ширина, глубина с итеративным углублением, какой-то лучший из первых?
  • Если это "лучший первый", какие эвристики используются для определения того, может ли конкретное приложение правил приблизиться к нашей цели?

Я также был бы признателен за любые другие советы (кроме "сдаться" - я регулярно игнорирую этот совет, и это хорошо мне помогло;).

4b9b3361

Ответ 1

Я сам занимался такими вопросами некоторое время назад. Затем я нашел этот документ об упрощении выражений. Он называется "Упрощение выражений на основе правил" и показывает некоторые подробности об упрощении в Mupad, который позже стал частью Matlab.

В соответствии с этим документом ваше предположение верно. Существует множество правил манипуляции выражениями. Эквивалентная метрика качества используется в качестве целевой функции для упрощения.

Ответ 2

Wolfram alpha разработан Mathematica

  • mathematica - детище Stephen Wolphram. Mathematica 1.0 был выпущен в 1988 году. Математика очень похожа на клен, и они оба сильно зависят от старых программных библиотек, таких как LaPack.
  • Библиотеки, на которых эти программы основаны, а зачастую и просто, устаревшим программным обеспечением. Они были вокруг и модифицированы очень долго.

Если вы хотите узнать о запущенных фоновых программах, sagemath - бесплатная альтернатива с открытым исходным кодом; вы можете переделать решения на свои вопросы:

SageMath.org