在Sympy中处理抽象数学运算符/对象



我想知道是否有一种简单的方法在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)。

最新更新