SymPy 中的复数:解决欧拉恒等式

3

我正在使用sympy(Python 3)处理复杂函数,但是在简化方程时遇到了麻烦。特别是我无法让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不够强大,无法识别该简化?提前感谢!

4
Sympy假设所有变量都是复数,因此它正确地返回了compVel的实部与UR等实部的关系。如果您通过U,z,R,theta=sym.symbols('U z R theta',real=True)将变量声明为实数,则Sympy将返回预期的输出。 - Stelios
1
@Stelios 应该是答案。 - user6655984
实际上它解决了单个U,但没有解决指数: - Mike
1个回答

0

我已经想通了。@Stelios是正确的,但是当你使用sympify时,你必须传递一个包含表达式本地变量的字典。

exp1=sym.sympify('R*exp(I*theta)',locals={'R':R,'theta':theta})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接