我有以下同情表达
>>> a
⎛2⋅π⋅(x - y)⎞
2 - 2⋅cos ───────────
⎝ P ⎠
我想简化为
2 ⎛π⋅(x - y)⎞
4⋅sin ─────────
⎝ P ⎠
使用维基百科中列出的第一个功率降低公式(逆)。
第二种形式仅涉及 6 个操作,而第一种形式涉及 7 个操作,但是当我使用fu
中的
sympy.simplify
函数试图最小化我得到的操作数量时:
>>> fu(a, measure=lambda x: x.count_ops())
⎛2⋅π⋅(x - y)⎞
2 - 2⋅cos ───────────
⎝ P ⎠
或者最多
>>> fu(sympy.expand_trig(a), measure=lambda x: x.count_ops())
2⎛π⋅(x - y)⎞
4 - 4⋅cos ─────────
⎝ P ⎠
仍涉及7次操作。有没有办法说服 sympy 输出
sin**2
形式?
2b
(其中
b
是一个符号),它会减少。
x, y, P, b = symbols("x y P b")
a = 2 - 2*cos(2*b)
new_a = fu(a, measure=lambda x: x.count_ops()).subs(b, 2*pi*(x-y)/P)
我认为优化器对根据其编写方式改变操作数量的术语感到困惑。