表达式简化算法

Als*_*Lin 4 math expression calculator

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

Ira*_*ter 5

是的。您可能想要的是一个计算机代数系统,它将公式理解为由显式数学规则操作的工件。

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

你需要做的是:

  • 将公式表示为抽象语法树
  • 将文本公式(您的示例方程)解析为这样的树
  • 编码一组表示代数运算的树操作规则
  • 将这些规则应用到您的代数树中
  • 完成后将代数树打印回文本

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

问题之一是决定您愿意编码多少“代数”规则。数学不仅仅是纯粹的九年级代数,使用此类系统的人们往往希望通过添加更多知识来扩展现有的内容(Mathematica 和 Macsyma 的要点:它们是无限可扩展的)。

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

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

  • @Scheff:感谢您指出这一点。(令人惊讶的是SO没有检查它们)。固定的。 (2认同)