sympy: trigonometric sum-product identities

前端 未结 2 1899
独厮守ぢ
独厮守ぢ 2020-12-10 15:50

I have an expression: sin(x)+sin(y)

There is a well-known trig identity to express this as the product of sin and cos.

Is there a way to get sym

2条回答
  •  有刺的猬
    2020-12-10 16:31

    trigsimp, as Aristocrates points out, does the reverse, because sin(x) + sin(y) is simpler than 2*sin((x + y)/2)*cos((x - y)/2).

    trigsimp internally uses an algorithm based on a paper by Fu, et. al., which does pattern matching on various trigonometric identities. If you look at the source code, all the identities are written out in individual functions (the functions are named after the sections in Fu's paper).

    Looking at the list of simplifications at the top of the file, the one you want is probably

    TR9 - contract sums of sin-cos to products
    

    Testing it out, it looks like it works

    In [1]: from sympy.simplify.fu import TR9
    
    In [2]: TR9(sin(x) + sin(y))
    Out[2]:
         ⎛x   y⎞    ⎛x   y⎞
    2⋅sin⎜─ + ─⎟⋅cos⎜─ - ─⎟
         ⎝2   2⎠    ⎝2   2⎠
    

    We would eventually like to factor these out into more user-friendly functions, but for now, the fu.py file is pretty well documented, even if all the function names are not particularly memorable.

提交回复
热议问题