积分和推导绝对函数 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│
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│