如何构建脚本以识别代数术语?

时间:2015-10-03 00:07:37

标签: python-2.7 symbolic-math object-oriented-analysis

我试图编写一个以某种方式代表代数表达式的脚本,并且我试图使其尽可能通用,以便它最终可以容纳诸如多变量表达式之类的东西,例如: xy^2 = z以及trig函数等其他内容。但是,我需要我的脚本能够简化表达式,例如简化x^2 + 2x^2 = 3x^2,为此,我需要它来识别类似的术语。但是,为了让它能够识别出类似的术语,我需要能够告诉我两个表达式何时相同,即使它们看起来不一样。因此,例如我需要以某种方式定义==以便计算机知道(x^2)^2 is x^4

到目前为止,我可以看到让计算机知道两个代数表达式是否完全相同的唯一方法是尝试创建某种类型的正常形式"对于所有表达式,然后比较正常形式。因此,例如,如果我将所有指数分配到乘法,乘以和的幂,将乘法分布在加法上,并计算所有简单数字的表达式,那么这可能至少接近像普通形式的东西。例如,(x^2)^2的正常形式为x^4x^4的正常形式为x^4。由于它们具有相同的正常形式,因此计算机可以告诉我它们是等同的表达式。它会说(2x)^2+x^2的正常形式为4x^2+x^2,因此不会认识到这种正常形式与5x^2的正常形式相同。

我在思考,在这个阶段我可以尝试定义一些"弱"平等观念,正常形式成分平等观念。使用这种平等概念,在正常形式中使用类似术语,这将使我获得更普遍正确的正常形式。

但所有这些听起来都是绝对的工作。到目前为止,我已经为表达式定义了类,它们具有变量,求和,乘积,幂等的子类,现在我通过定义将产生的函数的大约1/4权力对象的正常形式 - 我甚至没有在Sum或Product类的正常形式上开始 - 并且代码已经很长很多页了,我仍然不确定它&# 39; ll最终以我想要的方式工作。

所以我的问题是,你如何实现这一目标?我目前的方法会起作用吗?有谁知道像Wolfram|Alpha这样的软件或者sympy软件包是如何实现这个功能的呢?

0 个答案:

没有答案