sympy 中的复数:解析欧拉恒等式

Posted

技术标签:

【中文标题】sympy 中的复数:解析欧拉恒等式【英文标题】:complex numbers in sympy: resolving Euler's Identity 【发布时间】:2017-10-31 10:18:30 【问题描述】:

我正在使用 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 功能不够强大,无法识别这种简化?提前致谢!

【问题讨论】:

Sympy 假设所有变量都是复数,因此它正确地返回 compVel 的实部以 UR 等的实部。如果您将变量声明为reals by U,z,R,theta=sym.symbols('U z R theta', real = True),sympy 返回预期输出 @Stelios 应该是答案。 实际上它解决了孤立的U,但它没有解决指数: 【参考方案1】:

我想通了; @Stelios 是正确的,但此外,当您使用 sympify 时,您必须传递包含表达式包含的局部变量的字典。

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

【讨论】:

以上是关于sympy 中的复数:解析欧拉恒等式的主要内容,如果未能解决你的问题,请参考以下文章

Python复数类型讲解

复数的幂运算-工程数学笔记

二项式定理与复数

python复数

3D数学基础四元数和欧拉角

快速傅里叶变换FFT(Fast Fourier Transform)