2016-09-19 17 views
2

sympyで次の積分を単純化しようとすると、評価されません。すなわち、出力は$ \ int _ { - 1}^1 | z | DZ $私は期待して出力を評価しますz上の絶対値なし整数1sympy:絶対値の積分を評価する方法

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

類似しています。

sympyでこの積分を評価するにはどうすればよいですか?

+3

私の印象はsympyの簡素化は、まだそれができるほど良好ではないということです。 simpy(trigsimp、ratsimp、powsimp、combsimp、...)にはいくつかの他の簡素化メソッドがありますが、積分を単純化できるとは考えていません。ハムナにはとてもシンプルに見えますが、シンプル化が失敗することもあります。この状況では、.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のAbs()機能を使うべきだと思います。

お楽しみください!

+0

お返事ありがとうございます。残念ながら、私は既に組み込みの 'sympy.Abs'関数もうまく試してみました。また、「abs」と「sympy.Abs」は同じ機能だと思う。 – Brian

+1

absは、オブジェクトごとに異なって定義された 'z .__ abs__'メソッドを呼び出すだけなので、正しいです(浮動小数点数やsympyシンボルなど)。 – dnalow

関連する問題