2016-09-19 125 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