我想知道是否有一种简单的方法在Sympy中实现抽象数学运算符。对于运算符,我只是指一些具有3个值作为输入或3个索引的对象,例如"运算符(a,b,c)"。请注意,我指的是数学运算符(在希尔伯特空间上),而不是编程上下文中的运算符。根据这些值,我想教Sympy如何将两个这样的运算符相乘,以及如何将其与浮点数相乘,等等。在计算的某些时候,我想用其他一些操作符替换这些操作符…
到目前为止,我还不能弄清楚sympy是否提供了这样一个抽象的计算。因此,我开始为这些对象编写一个新的Python类,但这很快就超出了我有限的Python知识范围……有没有更简单的方法来实现,然后创建一个新的类?
除了SymPy之外,您可能还想看看SageMath,因为Sage花了很大的精力来提供预构建的数学结构。然而,它的发展更多地着眼于代数几何、代数的各个领域和组合学。我不确定它在多大程度上实现了任何运算符代数
是的,你可以这样做。只需创建sympy.Function
的子类。您可以使用nargs
class Operator(Function):
nargs = 3
如果你想让函数对某些参数求值,定义类函数eval
。当它应该保持未求值时,它应该返回None
。例如,要在三个参数都为0时求值为0,可以使用
class Operator(Function):
@classmethod
def eval(cls, a, b, c):
if a == b == c == 0:
return Integer(0)
(注意,如果定义了eval
,则不需要nargs
)。