你没有做错任何事情。这是Sympy在两个分段函数的乘积上出现问题。通过调用piecewise_fold(f(x-y)*f(y))
,你会发现它无法对这个乘积进行排序,将其留作嵌套的分段函数构造。
Piecewise((Piecewise((1, And(x - y <= 1, x - y >= -1)), (0, True)), And(y <= 1, y >= -1)), (0, True))
如果您手动展开这个嵌套的分段函数,积分将会正确运行。
g = Piecewise((1, And(x-y <= 1, x-y >= -1, y <= 1, y >= -1)), (0, True))
integrate(g, (y, -oo, +oo))
输出 Min(1, x + 1) - Min(1, x + 1, Max(-1, x - 1))
,这是正确的,尽管不是人们预期的形式。
-Max(-1, x - 1) + Max(-1, x - 1, Min(1, x + 1))
。 - smichr