我需要在python中实现一些Grassmann变量(即反交换变量)。换言之,我想要一些行为如下
>>> from sympy import *
>>> x, y = symbols('x y')
>>> y*x
-x*y
>>> y*y
0
我需要的另一个特性是能够对变量进行规范排序。当我输入>>> y*x
时,在-x*y
上输出{x
应该出现在y
的左边(也许只有在调用函数simplify(y*x)
之后)。在
SymPy或其他图书馆有这种能力吗?如果没有,那最好的方法是什么来实现它(例如,我应该自己创建一个符号库,扩展SymPy等等)?在
您可以创建一个继承自
Symbol
的新类,并将其乘法(__mul__
)的行为更改为所需的行为。 为了使其有用,您无论如何都需要一个规范化的排序,它应该与SymPy的(一眼望去似乎是按名称命名的,即Symbol.name
)相同,以避免出现问题。在现在,这仍然不能正确地解析复杂的产物,如
^{pr2}$x*y*x*y
。 为此,我们可以编写一个对任意产品排序的函数(使用气泡排序):最后,我们可以编写一个函数,通过迭代表达式树并将
^{3}$sort_product
应用于它遇到的每个产品,从而对表达式中的所有产品进行排序:请注意,我可能还没有解释所有可能发生的事情。在
相关问题 更多 >
编程相关推荐