Как такая система, как 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-бесплатная альтернатива с открытым исходным кодом; вы можете перепроектировать решения своих вопросов: