试图简化SymPy中的一个顽固表达式——复指数/三角空间矢量方程



我正在努力简化

cos(phi) + cos(phi - 2*pi/3)*e^(I*2*pi/3) + cos(phi - 4*pi/3)*e^(I*4*pi/3)

我知道它降低到1.5e^(I*phi(

我无法让赛姆皮认出这一点。我试过simplifytrigsimpexpand等,但似乎都不起作用。有什么建议吗?

这是我的代码:

import numpy as np
%matplotlib inline 
import matplotlib.pyplot as plt
import sympy as sp
from sympy import I 
sp.init_printing()
phi = sp.symbols('phi', real = True)
vec = sp.cos(phi) + sp.cos(phi - 2*sp.pi/3)*sp.exp(I*2*sp.pi/3) + sp.cos(phi - 4*sp.pi/3)*sp.exp(I*4*sp.pi/3)
vec.simplify()
vec.rewrite(sp.exp).simplify()
vec.rewrite(sp.exp).expand().simplify()

这些都没有产生预期的结果。我可以手动确认我的结果,用中的值代替phi,如下所示:

sp.simplify(vec.rewrite(sp.exp).simplify() - 3/2*sp.exp(I*phi)).evalf(subs={phi:3})

这并不明显,但你可以这样做:

In [40]: phi = symbols('phi', real=True)
In [41]: e = cos(phi) + cos(phi - 2*pi/3)*E**(I*2*pi/3) + cos(phi - 4*pi/3)*E**(I*4*pi/3)
In [42]: e
Out[42]: 
-2⋅ⅈ⋅π                         2⋅ⅈ⋅π           
───────                        ─────           
3       ⎛    π⎞               3      ⎛    π⎞
- ℯ       ⋅sin⎜φ + ─⎟ + cos(φ) - ℯ     ⋅cos⎜φ + ─⎟
⎝    6⎠                      ⎝    3⎠
In [43]: e.rewrite(exp).expand().rewrite(sin).expand().rewrite(exp)
Out[43]: 
ⅈ⋅φ
3⋅ℯ   
──────
2 

这无疑是一个手工计算可能比探索如何使用SymPy更快的例子。

无论如何,这就是我实现这一目标的方式:

vec.rewrite(exp).simplify().subs(
root(-1, 6),
root(-1, 6).rewrite(exp)
).expand().subs(
I * exp(-5 * I * pi / 6),
(I * exp(-5 * I * pi / 6)).simplify().rewrite(exp)
).simplify().expand()
# out: 3*exp(I*phi)/2

最新更新