2016-09-19 3 views
2

Wenn ich versuche, das folgende Integral in sympy zu vereinfachen, wird es nicht ausgewertet, d. H. Die Ausgabe ist $ \ int _ {- 1}^1 | z | dz $, während der Ausgang erwarte ich 1 istsympy: wie das Integral des absoluten Werts zu bewerten ist

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

ähnliches Integral ohne den absoluten Wert auf z bewerten wird.

Wie kann ich sympy erhalten, um dieses Integral zu bewerten?

+3

Mein Eindruck ist, Vereinfachung, sympy das ist noch nicht so gut, wie es sein könnte. Es gibt auch einige andere Vereinfachungsmethoden in simpy (trigsimp, ratsimp, powsimp, combsimp, ...), aber ich würde nicht darauf zählen, dass sie das Integral vereinfachen könnten. Manchmal fällt die Vereinfachung aus, obwohl es für humna sehr einfach aussieht. Sie können in dieser Situation auch die .evalf() Methode verwenden. Schau auch hier nach: http://docs.sympy.org/latest/tutorial/simplification.html – dnalow

Antwort

3

integrate tut schon alles, um ein Integral auszuwerten. Wenn Sie ein Integral Objekt zurück erhalten, bedeutet das, dass es nicht ausgewertet werden konnte. Das einzige, was helfen könnte, ist das Umschreiben des Integranden in einer Weise, die SymPy erkennen kann.

Mit Blick auf this issue, es sieht aus wie eine Behelfslösung es als Heaviside neu zu schreiben ist:

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

Ich glaube, Sie sollten Sympy eingebaute Abs() Funktion verwenden.

Viel Spaß!

+0

Hallo, danke für deine Antwort. Leider habe ich die eingebaute 'sympy.Abs' Funktion auch schon ohne Erfolg ausprobiert. Ich glaube auch, dass "abs" und "sympy.Abs" die gleiche Funktion haben. – Brian

+1

abs ist korrekt, da es nur die 'z .__ abs__' Methode aufruft, die für jedes Objekt unterschiedlich definiert ist (floats oder sympy Symbole etc ..) – dnalow

Verwandte Themen