首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何确定两个数学表达式是否“某种程度上”相同?

我如何确定两个数学表达式是否“某种程度上”相同?
EN

Stack Overflow用户
提问于 2014-04-17 21:48:26
回答 1查看 113关注 0票数 1

很抱歉这个问题含糊不清,也许我想换个地方?不确定。不管怎么说,这里:

我想确定两个数学表达式是否是“相同的”。我不需要完全的等值测试,我知道这是不可能的。基本上,我想做一个如下所示的函数:

areTheSame(expression1,expression2,测试方法)

测试方法可能包括:“确切”、“允许交换性”、“允许分布”、.

  • “确切”很简单:如果字符串完全相等的话,expression1 == expression2
  • “允许交换性”将更加困难。例如,如果expression1是y=3*x,expression2是y=x*3,那么在“允许交换性”下,它们是相同的。“y=x”和“x=y”也是如此。
  • “允许分布”允许'y=2*(x-3)‘等于'y=2*x-6’。
  • 其他?

理想情况下,我喜欢懒惰!我很想找个图书馆

  1. 支持解析来自乳液表示的表达式(或者MathML,它已经是xml,可能更容易解析)
  2. 支持使用一些标志或控制比较的精确程度的标志进行等价测试,如上面所示。
  3. 是用c或c++编写的(或者目标-C-这是为iOS项目编写的)
  4. 不是GPL。

4排除SymbolicC++和GiNaC afaik。Math以利是LGPL,我不确定在苹果应用商店的上下文中(我真的不想给出目标文件)。

有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-04-18 05:39:41

这可能不是一个答案,但它太长,不能成为评论。:)

我的第一个想法是:这不是一个容易或常见的问题,所以你可能不会很幸运地找到一个库为你做这件事。另一方面,找到一个做一些非关键部分的库应该不难。

您可能想要做的是解析表达式以创建一个抽象语法树 (您可能会为此找到很多库),然后递归地分析AST,以测试您所追求的相同性的任何定义。

在iOS中,一个不错的起点可能是(可怕的ab)使用NSExpressionNSPredicate。它们具有解析字符串并返回表达式和谓词对象结构的构造函数方法。

递归地遍历这个结构。对于每个谓词,检查predicateOperatorType是否匹配..。如果没有,那么谓词就不一样了。如果是这样,请查看左谓词的leftExpression和右谓词的leftExpression。每个表达式都有一个function,它告诉您它的运算符是什么(加、减等)。如果它们不匹配,表达方式就不一样了。(在另一边做同样的检查。)如果是的话,递归:查看每个表达式的子表达式并进行类似的检查,等等,直到找到常量值或变量的表达式为止。

这是关于如何查看两个谓词(以及它们包含的表达式)是否“匹配”的粗略说明。对于“类似的”,只需在递归遍历树和/或添加更多检查时,放松您执行的每个检查;例如,如果您到达一个函数为add的表达式,则通过将其子表达式与另一个谓词中的相应表达式按任一顺序进行比较来检查其交换性。(此外,可能还有其他库可以解析基本的数学表达式,并为您提供一个可以随意遍历的AST。)

这还不能让你得到你想要的一切--“允许发行”会让你进入成熟的CAS软件领域。也许可以看看Wolfram这样的公司是否有web服务API?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23144033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档