我想知道是否有一种在Sympy中实现抽象数学运算符的简单方法。对于运算符,我只是指一些具有3个值作为输入或3个索引的对象,类似于"运算符(a,b,c)"。请注意,我指的是数学运算符(在hilbert空间上),而不是编程环境中的运算符。根据这些值,我想教Sympy如何将这种类型的两个运算符相乘,以及如何将它与浮点数相乘等等。在计算的某个阶段,我想用其他一些操作符替换这些操作符......
到目前为止,我无法弄清楚sympy是否提供了这样一个抽象的计算方法。因此,我开始为这些对象编写一个新的Python类,但这超出了我在Python中有限的知识范围......是否有更简单的方法来实现,然后创建一个新的类?
答案 0 :(得分:1)
除了SymPy之外,你可能还想看看SageMath,因为Sage竭尽全力提供预建的数学结构。然而,随着代数几何学,代数的各个领域和组合学的发展,它的发展更多。我不确定它实现任何运算符代数的程度。
答案 1 :(得分:0)
是的,你可以这样做。只需创建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)
(请注意,如果您定义nargs
),则不需要eval
。