【问题标题】:Expression Simplification Algorithm表达式简化算法
【发布时间】:2014-09-16 20:33:31
【问题描述】:

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

【问题讨论】:

    标签: math expression calculator


    【解决方案1】:

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

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

    你需要做的是:

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

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

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

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

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

    【讨论】:

    • @Scheff:感谢您指出这一点。 (很惊讶 SO 没有检查它们)。固定。
    猜你喜欢
    • 2011-07-15
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多