像WolframAlpha或Mathematica这样的系统是如何求解方程的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (145)

我正在构建一个基于web的编程语言,部分灵感来自Prolog和Haskell。

它已经有了相当多的功能,可以在http://www.lastcal.com/.你可以看到源头这儿并且读到了关于这个建筑的文章这儿记住这是个原型

目前,LastCalc无法简化表达式或求解方程。我不想用Java对其进行硬编码,我希望增强基本语言,以便只使用语言本身(如Prolog)就可以扩展它来完成这些事情。与PROLOG不同,LastCalc有一个更强大的搜索算法,Prolog是“深度优先和回溯搜索”,LastCalc目前使用的是启发式最佳优先搜索。

在深入研究这个问题之前,我想进一步了解其他系统是如何解决这个问题的,特别是Mathematica/WolframAlpha。

我假设这个想法,至少在一般情况下,是你给系统一堆操作方程的规则(比如a*(b+c) = a*b + a+c)指定目标(例如隔离变量x),然后松开它。

所以,我的问题是:

  • 我的假设正确吗?
  • 应用规则的搜索策略是什么?比如深度第一、广度第一、深度第一与迭代深化,某种最好的第一?
  • 如果它是“最好的第一”,那么使用什么启发式来确定某个特定的规则应用程序是否使我们更接近我们的目标呢?
提问于
用户回答回答于

不久前我自己也处理过这样的问题。然后我发现本文件关于简化表达。它的标题是基于规则的表达式简化并给出了Mupad简化的一些细节,后者后来成为Matlab的一部分。

根据这份文件,你的假设是正确的。有一组规则用于操作表达式。采用启发式质量度量作为简化的目标函数。

用户回答回答于

Wolframα是由Mathematica开发的。

  • 数学是stephen wolphram的创意。数学1.0是在1988发布的。Mathematica很像枫树,它们都严重依赖于像LaPack这样的老软件库。
  • 这些程序所基于的库,通常是简单的遗留软件。他们已经存在了很长一段时间了,并且被修改了。

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

SageMath.org

扫码关注云+社区

领取腾讯云代金券