2014-06-05 15 views
5

Quando si lavora con numeri complessi in forma polare, ho riscontrato uno strano comportamento. Ad esempio, facendoValore assoluto di sympy dell'esponenziale complesso

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

mi aspetterei il risultato 1, perché il valore assoluto di un esponenziale complesso dovrebbe essere sempre uno se l'esponente è solo immaginario. Tuttavia, sympy dà come risposta

Abs(exp(I)) 

Facendo l'alternativa

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

dà il risultato atteso, ma è meno chiaro di abs a mio parere. Ho perso qualche vincolo che impedisce a sympy di eseguire questa semplificazione quando si usano solo gli abs?

+0

semplificare non è pensato per eseguire i calcoli, immagino? – Ashalynd

+0

Beh, per quale motivo? Inoltre non importa se la semplificazione è presente o meno. – jan

risposta

3

simplify potrebbe sicuramente essere più intelligente su questo.

In generale, per semplificare le cose usando numeri complessi, utilizzare expand_complex, che cerca di riscrivere l'espressione come a + b*I, dove a e b sono reali. Questo funziona per me.

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

Buona soluzione per questo problema, grazie. – jan