2012-12-21 114 views
2

请原谅我,如果这是一个基本问题,或者如果已经有丰富的解决方案,但我不知道如何简洁地表达这个问题,我找不到任何结果。我一直在思考这个问题很长一段时间,我似乎无法找到解决方案。符号比较

我想要做的是通过字符串比较符号声明。例如,在数学,

4x = 4x is true. 

但对于

(12/3)x = 4x 
(5-1)x = (4/1)x 
((5-1)/1)x = (4/1)x 
so on . . . 

在证明,

1 = sin(x)^2 + cos(x)^2 
tan(x) = sin(x)/cos(x) 
sin(2x) = 2*sin(x)*cos(x) 
and so on . . . 

在逻辑,

~~p <-> p 
~(p * q) <-> (~p v ~q) 
~(p v q) <-> (~p * ~q) 
(p v q) <-> (q v p) 
(p * q) <-> (q * p) 
and so on . . . 

请记住,这些投入字符串。我遇到的问题是理论上存在无限量的双方可以平等的情况。

当然,第一个问题是如何解析数值与符号值并枚举它们。我在这方面行得通。

我什至不知道从哪里开始,所以任何指针将不胜感激。

+2

归结为表达式树的简化算法。出于某种原因,许多人使用'LISP'完成这项任务,我不知道为什么。 – ja72

+0

@ ja72:我认为人们使用LISP是因为它具有象征性的操作功能,但它也可能是历史性的。实际上,许多早期的计算机代数系统都是用LISP编写的,我的答案中的一条评论引用了一本为其系统使用LISP(Scheme)方言的书。 – RonaldBarzell

+2

我真的不明白为什么这是封闭的**不具有建设性**。是否因为没有涉及代码?因为相关信息*是由有信誉的来源引入的,虽然我没有得到代码示例,但至少我得到了一些认真的理论解决方案。即使解决方案本身也很难理解和推。。只有一个回答者和另一个有用的评论者,所以唯一回答的人指出了我正确的方向并得到了答案。没有辩论,争论或投票。我不明白为什么它被关闭了。 – rbtLong

回答

3

我会得到一个符号代数包。他们可以进行派生,简化和减少比较等操作。许多也是可编程的。那里有一些很好的免费的。

这里有一个列表: http://en.wikipedia.org/wiki/List_of_computer_algebra_systems

如果你正在寻找在你的代码这样做的方式,也许你能找到你所选择的语言符号代数库。

+2

优秀的答案。如果你在寻找更多的背景知识,计算机程序的结构和解释关于符号微分(和计算机代数)的视频是一个极好的研究起点。 http://ocw.mit。edu/courses /电气工程与计算机科学/ 6-001-计算机程序结构与解释 - 春季2005 /视频讲座/ 3b-symbolic-differentiate-quotation/ –

+1

@AndrewWalker:谢谢。 SICP的巨大荣誉。这是一本极好的书,非常值得一读。它可能是我读过的最好的CS书。 – RonaldBarzell