2014-06-05 15 views
5

Wenn ich mit komplexen Zahlen in polarer Form arbeite, habe ich ein seltsames Verhalten erlebt. Zum Beispiel tutSympy Absolutwert von komplexen Exponential

from sympy import * 
simplify(Abs(exp(I))) 

Ich würde das Ergebnis 1 erwarten, da der Absolutwert eines komplexen exponentiellen immer sein soll, wenn der Exponent nur imaginär. Allerdings gibt sympy als Antwort

Abs(exp(I)) 

Doing die alternativen

phi=symbols('phi', real=True) 
y=exp(I*phi) 
sqrt(y*conj(y)) 

das erwartete Ergebnis liefert, ist jedoch weniger klar als abs meiner Meinung nach. Habe ich eine Einschränkung übersehen, die verhindert, dass Sympy diese Vereinfachung durchführt, wenn man nur Bauchmuskeln benutzt?

+0

Vereinfachung ist nicht für die Berechnungen gedacht, denke ich? – Ashalynd

+0

Nun, aus welchem ​​Grund? Es spielt auch keine Rolle, ob die Vereinfachung vorhanden ist oder nicht. – jan

Antwort

3

simplify könnte definitiv schlauer darüber sein.

Im Allgemeinen, um die Dinge mit komplexen Zahlen zu vereinfachen, verwenden expand_complex, die den Ausdruck als a + b*I neu zu schreiben versucht, wo a und b real sind. Das funktioniert für mich.

In [17]: (abs(exp(I))).expand(complex=True) 
Out[17]: 
    ___________________ 
    ╱ 2   2 
╲╱ cos (1) + sin (1) 

In [18]: simplify(abs(exp(I)).expand(complex=True)) 
Out[18]: 1 
+0

Gute Abhilfe für dieses Problem, danke. – jan