2016-09-19 126 views
2

当我尝试简化sympy中的以下积分时,它不会进行评估,即输出为$ \ int _ { - 1}^1 | z | DZ $,而我期望输出为1sympy:如何评估绝对值的积分

z = symbols('z', real=True) 
a = integrate(abs(z), (z, -1, 1)) 
simplify(a) 

不会对z绝对值将评估类似积分。

我怎样才能得到sympy来评估这个积分?

+3

我的印象是sympy的简化是没有好,因为它可能是。 simpy中还有其他几种简化方法(trigsimp,ratsimp,powsimp,combsimp,...),但我不会指望它们能够简化积分。有时简化失败,尽管它对humna看起来很简单。您也可以在这种情况下使用.evalf()方法。看看这里:http://docs.sympy.org/latest/tutorial/simplification.html – dnalow

回答

3

integrate已经尽其所能来评估积分。如果你得到一个Integral对象,这意味着它无法评估它。唯一可能的帮助是以SymPy可识别的方式重写被积函数。

看着this issue,它看起来像一个解决方法是把它改写为亥:

In [201]: z = symbols('z', real=True) 

In [202]: a = integrate(abs(z).rewrite(Heaviside), (z, -1, 1)) 

In [203]: a 
Out[203]: 1 
-3

我相信你应该使用Sympy's内置的Abs()函数。

享受!

+0

你好,谢谢你的回应。不幸的是,我已经尝试了内置的'sympy.Abs'函数,但没有成功。另外,我相信'abs'和'sympy.Abs'是相同的功能。 – Brian

+1

abs是正确的,因为它只是调用每个对象都有不同定义的'z .__ abs__'方法(漂浮物或sympy符号等)。 – dnalow