from sympy.abc import i, j, n
from sympy import *
from sympy.concrete.delta import _simplify_delta
x = IndexedBase('x')
U = Sum(KroneckerDelta(i, j, (1, n)) * (x[i] + 1), (i, 1, n))
U1 = Sum(KroneckerDelta(i, j, (1, n)) * Piecewise((x[i] + 1, x[i] > 0), (0, True)), (i, 1, n))
print(simplify(U.doit()))
# output: x[j] + 1 (OK)
print(simplify(U1.doit()))
# output: Sum(Piecewise(((x[i] + 1)*KroneckerDelta(i, j, (1, n)), x[i] > 0), (0, True)), (i, 1, n))
# desired output: Piecewise((x[j] + 1, x[j] > 0), (0, True))
如上所述,我试图简化其中包含分段因子的求和。没有分段可以简化,但是有分段就不行。