像Wolfram Alpha或Mathematica这样的系统如何解决方程?

时间:2013-09-10 19:57:21

标签: algorithm wolfram-mathematica artificial-intelligence algebra

我正在构建一个基于网络的编程语言,部分受到Prolog和Haskell的启发(不要笑)。

它已经具有相当多的功能,您可以在http://www.lastcalc.com/查看原型。您可以查看来源here并阅读有关架构here的内容。记住它是原型。

目前,LastCalc无法简化表达式或求解方程式。我不想在Java中对其进行硬编码,而是希望增强基本语言,以便可以使用语言本身来扩展它来执行这些操作(与Prolog一样)。与Prolog不同,LastCalc具有更强大的搜索算法,Prolog是“深度优先搜索带回溯”,LastCalc目前使用启发式最佳优先搜索。

在深入研究之前,我想更多地了解其他系统如何解决这个问题,特别是Mathematica / Wolfram Alpha。

我认为这个想法,至少在一般情况下,是你给系统一套规则来操纵方程式(如a*(b+c) = a*b + a+c)指定目标(例如。隔离变量x)然后让它松了。

所以,我的问题是:

  • 我的假设是否正确?
  • 申请规则的搜索策略是什么?例如。深度优先,广度优先,深度优先,迭代深化,某种最好的第一个?
  • 如果它是“最好的第一”,那么使用什么启发法来确定特定规则应用程序是否可能让我们更接近目标?

我也很欣赏任何其他建议(除了“放弃” - 我经常忽略这条建议,这样做对我有好处;)。

2 个答案:

答案 0 :(得分:10)

我前段时间处理过这些问题。然后我找到this document关于表达式的简化。它名为基于规则的表达式简化,并显示了有关Mupad简化的一些细节,后来成为了Matlab的一部分。

根据这份文件,您的假设是正确的。有一套用于处理表达式的规则。启发式质量度量被用作简化的目标函数。

答案 1 :(得分:2)

Wolfram alpha由Mathematica开发

  • mathematica是stephen wolphram的心血结晶。 Mathematica 1.0于1988年发布.mathematica非常像枫树,它们都严重依赖于像LaPack这样的旧软件库。
  • 这些程序所基于的遗产软件,通常只是遗留软件。他们已经很长时间了,并且已经修改过了。

如果您想了解正在运行的后台程序,sagemath是一个免费的开源替代方案;您可以对问题的解决方案进行反向工程:

SageMath.org