我开始使用 sympy。我计算了一个卷积,但结果不正确:
这个结果是错误的:正确的结果是
那我做错了什么?我之前用sympy来整合分段函数,没问题...
代码:
from sympy import *
init_session()
f = lambda x: Piecewise( (1 , (x >= -1) & (x <= 1)) , (0 , True) )
Conv = lambda x: integrate( f(x-y)*f(y) , (y, -oo, +oo) )
最佳答案
你没有做错任何事。 Sympy 对两个分段表达式的乘积有疑问。通过调用 piecewise_fold(f(x-y)*f(y))
,您可以看到它无法将此乘积分类,将其保留为嵌套的 Piecewise 构造。
Piecewise((Piecewise((1, And(x - y <= 1, x - y >= -1)), (0, True)), And(y <= 1, y >= -1)), (0, True))
符号积分例程在这个嵌套的东西上绊倒了,这可能值得 filing an issue on GitHub .
解决方法
如果您手动展平这个嵌套的 Piecewise,集成工作正常。
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))
即 correct尽管可能不是人们期望的形式。
关于python - 在 sympy 中集成分段函数时出现错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852159/