试图简化 SymPy 中的一个顽固表达式 - 复指数/三角函数 space 向量方程
Trying to simplify a stubborn expression in SymPy - complex exponential / trigonometric space vector equation
我正在努力简化
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)
我无法让 SymPy 识别这一点。我尝试了 simplify
、trigsimp
、expand
等。但似乎没有任何效果。有什么建议吗?
这是我的代码:
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()
其中 None 会产生预期的结果。
我可以手动确认我的结果,方法是在 phi
中替换值,如下所示:
sp.simplify(vec.rewrite(sp.exp).simplify() - 3/2*sp.exp(I*phi)).evalf(subs={phi:3})
这绝对是一个示例,其中手动计算可能比探索如何使用 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
不是很明显,但你可以这样到达那里:
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
我正在努力简化
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)
我无法让 SymPy 识别这一点。我尝试了 simplify
、trigsimp
、expand
等。但似乎没有任何效果。有什么建议吗?
这是我的代码:
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()
其中 None 会产生预期的结果。
我可以手动确认我的结果,方法是在 phi
中替换值,如下所示:
sp.simplify(vec.rewrite(sp.exp).simplify() - 3/2*sp.exp(I*phi)).evalf(subs={phi:3})
这绝对是一个示例,其中手动计算可能比探索如何使用 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
不是很明显,但你可以这样到达那里:
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