表达式简化算法

时间:2014-07-25 04:29:26

标签: math expression calculator

我目前正在开发一个计算器应用程序,我希望输出都是简化表达式和十进制答案形式。一个例子是sqrt 2 * sqrt 3 = sqrt 6,它也可以输出为2.44948 ...最好的方法是什么,有没有完善的算法来做到这一点?

1 个答案:

答案 0 :(得分:1)

是。您可能想要的是computer algebra system,它将公式理解为由显式数学规则操纵的工件。

Mathematica和Macsyma是执行此操作的应用程序。然而,这些是相当复杂的系统,并且不容易看出它们如何“工作”。

您需要做的是:

  • 将公式表示为抽象语法树
  • 将文本公式(您的示例公式)解析为此类树
  • 对代表代数运算的一组树操作规则进行编码
  • 将这些规则应用于代数树
  • 完成时将代数树打印成文本

规则最好用代数的表面语法编写。 (Mathematica不这样做;它使用一种前缀S表达式将公式表示为树,并将规则表示为具有特殊变量节点的相同类型的树)。

其中一个问题是决定你要编码多少“代数”规则。数学不仅仅是纯粹的9年级代数,使用这类系统的人往往希望通过增加更多知识来扩展其中的东西(Mathematica和Macsyma的观点:它们是无限可扩展的)。

这是一个非常简单的版本。在解析树和重写规则方面,您可以看到所有“齿轮”以及如何描述事物。

http://www.semdesigns.com/products/DMS/SimpleDMSDomainExample.html