在 SymPy 中设置算法

Set arithmetic in SymPy

我们可以在 SymPy 中执行集合运算吗?

我只能找到如何使用 imageset 进行一些非常具体的集合算术。

例如,我可以获得一组整数加上一半,但是当尝试使用具有多个变量的 lambda 时,它给出了 ValueError('Incompatible signature'),虽然我找不到确切的原因,但我认为它是因为它只支持图像集中 lambda 的一个参数:

>>> print(imageset(lambda x: x + 1/2, S.Integers))
ImageSet(Lambda(x, x + 1/2), Integers)
>>> print(imageset(lambda x,y: x + y, S.Integers*S.Rationals))
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/base/data/home/apps/s~sympy-live-hrd/66.426491309333028408/sympy/sympy/sets/sets.py", line 2058, in imageset
    r = ImageSet(f, set)
  File "/base/data/home/apps/s~sympy-live-hrd/66.426491309333028408/sympy/sympy/sets/fancysets.py", line 317, in __new__
    raise ValueError('Incompatible signature')
ValueError: Incompatible signature

当然,对有理数和整数求和不会给出有趣的结果,但对于任意集合,它可用于对集合求和,并且类似地可用于对集合进行减法或乘法(元素方面)。

是否有任何其他方法可以使用 imageset 执行设置 addition/subtraction/multiplication 或者可能有类似 set_add(S,T) 的方法?

我对 应该如何 的预见受到集合模块的限制,但它现在的工作方式是您必须分别为 lambda 的每个参数发送集合:

>>> imageset(lambda x,y: x+y, Integers,Integers)
ImageSet(Lambda((x, y), x + y), Integers, Integers)

另请参阅:SetExpr