在Sympy中对分段函数进行积分时出现错误结果。

3
我开始使用sympy。我计算了一个卷积,但结果不正确:

enter image description here

enter image description here

这个结果是错误的:正确的结果是

enter image description here

那么我做错了什么?我以前使用过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) )
1个回答

1

你没有做错任何事情。这是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))

符号积分程序在这个嵌套的东西上出了问题,可能值得在GitHub上提交一个问题

解决方法

如果您手动展开这个嵌套的分段函数,积分将会正确运行。

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)),这是正确的,尽管不是人们预期的形式。


1
它提供了另一种形式:-Max(-1, x - 1) + Max(-1, x - 1, Min(1, x + 1)) - smichr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接