积分和推导绝对函数 sympy

Integrating and deriving absolute functions sympy

Sympy 通常是计算函数积分和导数的好工具。当函数碰巧包含一个绝对分量时 (|x|),出于某种原因它似乎无法弄清楚。

例如当你写这样的东西时:

diff(abs(x+1))

您将得到以下输出:

sign⁡(x+1)

答案应该是(x+1)/|x+1|,那么sympy有什么问题吗?有没有解决办法?

在 SymPy 中,sign(z) 被定义为 z/|z|,用于非零复数 z。事实上 sign(z) 的另一个定义恰好是 abs(z) 的导数: https://en.wikipedia.org/wiki/Sign_function#Definition

理想情况下应该可以将 rewrite(Abs)sign 一起使用,但目前还不能: https://github.com/sympy/sympy/issues/19277

请注意,如果没有任何方法知道 x+1 是非零的(例如,如果 x 被声明为 positive`),重写在您的情况下将不起作用。

您可以使用 replace 手动强制重写:

In [4]: s
Out[4]: sign(x + 1)

In [5]: s.replace(sign, lambda arg: arg/Abs(arg))
Out[5]: 
 x + 1 
───────
│x + 1│