2017-05-30 3 views
1

私はsympy(python 3)で複雑な関数を扱っていますが、方程式を単純化するためsympyを得るのに問題があります。特に、複雑な指数関数を実数部と虚数部に分解するために、オイラーのアイデンティティをsympyに使用することはできません。ここに私のコードは次のとおりです。sympyの複素数:オイラーのアイデンティティを解決する

import sympy as sym 
from sympy import I, init_printing 

# setup printing 
init_printing() 

# complex potential cylinder in uniform flow 
U,z,R,theta=sym.symbols('U z R theta') 
F=U*z+U/z 

# complex velocity cylinder in uniform flow 
compVel=sym.diff(F,z) 
exp1=sym.sympify('R*exp(I*theta)') 
compVel=compVel.subs(z,exp1) 
print(compVel) 
phi,psi=sym.symbols('phi psi') 
phi=sym.re(compVel) 
psi=sym.im(compVel) 
print(phi) 
print(psi) 

私はこのコードを実行すると、出力がされています

U - U*exp(-2*I*theta)/R**2 
re(U) - re(U*exp(-2*I*theta)/R**2) 
im(U) - im(U*exp(-2*I*theta)/R**2) 

私は何かが足りないか、この単純化を認識行うのに十分強力でsympyではないだろうか?前もって感謝します!

+2

Sympyはすべての変数が複雑であるとみなし、 'comp'の実数部を' U'、 'R'などの部分で正しく返します。変数を実数として宣言すると'U、z、R、theta = sym.symbols( 'U z R theta'、real = True)'、sympyは期待される出力を返します。 – Stelios

+0

@Stelios答えが必要です。 – FTP

+0

ありがとうございました。 – Mike

答えて

0

私はそれを理解しました。 @Steliosは正しいですが、sympifyを使用する場合は、式に含まれるローカル変数を辞書に渡す必要があります。

exp1=sym.sympify('R*exp(I*theta)',locals={'R':R,'theta':theta}) 
関連する問題