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

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

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

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

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

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

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

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

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

2 ответов


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

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


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

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

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

SageMath.org