Python 2.7 如何构造一个脚本来识别类似代数的术语?
我正在尝试编写一个脚本,以某种方式表示代数表达式,并且我正在尝试使其尽可能通用,以便最终能够容纳多变量表达式之类的内容,例如,Python 2.7 如何构造一个脚本来识别类似代数的术语?,python-2.7,symbolic-math,object-oriented-analysis,Python 2.7,Symbolic Math,Object Oriented Analysis,我正在尝试编写一个脚本,以某种方式表示代数表达式,并且我正在尝试使其尽可能通用,以便最终能够容纳多变量表达式之类的内容,例如,xy^2=z和其他类似于trig函数的内容。但是,我需要我的脚本能够简化表达式,例如简化x^2+2x^2=3x^2,为此,我需要它识别类似的术语。然而,为了让它识别相似的术语,我需要它能够告诉我两个表达式何时相同,即使它们看起来不一样。例如,我需要用某种方式定义==使计算机知道(x^2)^2是x^4 到目前为止,我能看到的让计算机知道两个代数表达式什么时候是相同的唯一方法
xy^2=z
和其他类似于trig函数的内容。但是,我需要我的脚本能够简化表达式,例如简化x^2+2x^2=3x^2
,为此,我需要它识别类似的术语。然而,为了让它识别相似的术语,我需要它能够告诉我两个表达式何时相同,即使它们看起来不一样。例如,我需要用某种方式定义==使计算机知道(x^2)^2是x^4
到目前为止,我能看到的让计算机知道两个代数表达式什么时候是相同的唯一方法是尝试为所有表达式创建某种“范式”,然后比较范式。举个例子,如果我将所有指数分布在乘法上,将和的幂相乘,将乘法分布在加法上,然后计算所有简单的数字表达式,那么这可能至少接近于标准形式。例如,(x^2)^2
的范式是x^4
,x^4
的范式是x^4
。因为它们有相同的范式,计算机可以告诉我它们是等价的表达式。它会说(2x)^2+x^2
的范式是4x^2+x^2
,因此不会承认这个范式与5x^2
的范式相同
我在想,在这个阶段,我可以尝试定义一些“弱”的平等概念,即标准形式组件的平等。使用这个平等的概念,标准形式中类似于组的术语,这将得到一个更普遍正确的标准形式
但所有这些听起来像是一大堆工作。到目前为止,我已经为表达式定义了类,这些类包含变量、和、积、幂等的子类,现在我已经完成了定义函数的四分之一,该函数将生成幂对象的标准形式——我甚至还没有开始研究和或积类的标准形式——代码已经有很多页了,我仍然不确定它最终是否能按我所希望的方式工作
所以我的问题是,你如何实现这个目标?我目前的方法行得通吗?有人知道像Wolfram | Alpha之类的软件或Symphy软件包是如何实现这一功能的吗?尝试一种方法
str(expression).replace(regex('regular_expressions'))
,(when^^
),转换成int()
“但所有这些听起来都是一大堆工作”。欢迎来到编码。