2016-12-29 14 views
3

シンボリックな表現を虚数で扱うためにSymPyコードを書くのは面倒です。SymPy虚数番号

まず、xとyを実数として取って、x = iyの解を探します。だから私はこれを次のように行うことができます。

x, y = sympy.symbols("x y", real=True) 
print(sympy.solve([x-sympy.I*y])) 

は(SymPyが解決0だからX-IY = 0 => X = IYでなければならないすべては、値のリストを取ります)。

x, y = sympy.symbols("x y") 
print(sympy.solve([x-sympy.I*y, sympy.im(y), sympy.im(x)])) 

それから、今SymPyが

[{re(y): y, re(x): I*y, im(x): 0, x: I*y, im(y): 0}] 

私に指示し、これが技術的に正しいです、:SymPyは正しく、私はこの(理論的には同じ)の方法を行う場合は、私に

[{x: 0, y: 0}] 

を教えてくれます私のためにすべてをしていない。これはSymPyの単なる制限ですか、あるいはこのように複雑なxとyを制約することでx = y = 0を与えることができますか?

+1

SymPyは、複素数よりも実数の組を単純化することにより多くの成功を収めています。ここにはこの種の[別の例](http://stackoverflow.com/a/41324803)があります。 – FTP

+0

別の例として、 'sympy.solve(x-sympy.conjugate(x))'はNotImplementedErrorをスローします。 – FTP

+0

他の例では、配合を変更することによって、それを正しく解決することができます。それは何とかこれにすることができますか? –

答えて

1

SymPyは複素数よりも実数の組を単純化するので、実数/虚数部の実数変数を設定し、複素数変数を形成するのに役立ちます。 0 0

from sympy import * 
x1, x2, y1, y2 = symbols("x1 x2 y1 y2", real=True) 
x = x1 + I*x2 
y = y1 + I*y2 

今xおよびyは、あなた

sol = solve([x-I*y, im(y), im(x)]) 
print(x.subs(sol[0]), y.subs(sol[0])) 

出力として式複素変数として使用することができます。