我正在乱写一些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). SymPy会正确地告诉我
[{x: 0, y: 0}]
但是,如果我这样做(理论上相同):
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和y来让它给我x = y = 0?
解决方法:
因为SymPy在简化实数对比复数时更好,所以以下策略有助于:为实部/虚部设置实数变量,然后从中形成复变量.
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]))
输出:0 0.