Как система, подобная 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), а затем освободить ее.
Итак, мои вопросы:
- Правильно ли мое предположение?
- Какова стратегия поиска для применения правил? например. сначала глубина, сначала ширина, глубина с итеративным углублением, какой-то лучший из первых?
- Если это "лучший первый", какие эвристики используются для определения того, может ли конкретное приложение правил приблизиться к нашей цели?
Я также был бы признателен за любые другие советы (кроме "сдаться" - я регулярно игнорирую этот совет, и это хорошо мне помогло;).
Ответы
Ответ 1
Я сам занимался такими вопросами некоторое время назад. Затем я нашел этот документ об упрощении выражений. Он называется "Упрощение выражений на основе правил" и показывает некоторые подробности об упрощении в Mupad, который позже стал частью Matlab.
В соответствии с этим документом ваше предположение верно. Существует множество правил манипуляции выражениями. Эквивалентная метрика качества используется в качестве целевой функции для упрощения.
Ответ 2
Wolfram alpha разработан Mathematica
- mathematica - детище Stephen Wolphram. Mathematica 1.0 был выпущен в 1988 году. Математика очень похожа на клен, и они оба сильно зависят от старых программных библиотек, таких как LaPack.
- Библиотеки, на которых эти программы основаны, а зачастую и просто, устаревшим программным обеспечением. Они были вокруг и модифицированы очень долго.
Если вы хотите узнать о запущенных фоновых программах, sagemath - бесплатная альтернатива с открытым исходным кодом; вы можете переделать решения на свои вопросы:
SageMath.org