Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python3 - Sympy: expand products of trig functions

Tags:

python

sympy

I cannot find a way to have SymPy expand products like cos(a)*cos(b) into sum of trig functions of sum of angles.

from sympy import *
init_printing()
wrf,wlo,t = symbols('\omega_RF \omega_LO t')
c = cos(wrf*t)*cos(wlo*t)
expand_trig(c)

Keeps the product intact. simplify(c) or trigsimp(c) also do not give any alternative form.

I would like to have cos(a)*cos(b) to be expanded to 1/2*(cos(a+b) + cos(a-b)) ...any hints?

like image 922
Michele Ancis Avatar asked Jun 28 '15 20:06

Michele Ancis


1 Answers

Per the docstring, help(sympy.fu),

fu will try to minimize the objective function measure. By default this first minimizes the number of trig terms and then minimizes the number of total operations.

However, if you pass

measure=lambda x: -x.count_ops()

then fu will try to maximize the op count.


import sympy as sy
sy.init_printing()
wrf, wlo, t = sy.symbols('\omega_RF \omega_LO t')
c = sy.cos(wrf*t)*sy.cos(wlo*t)
print(sy.fu(c, measure=lambda x: -x.count_ops()))

yields

cos(\omega_LO*t - \omega_RF*t)/2 + cos(\omega_LO*t + \omega_RF*t)/2

Alternatively, you could call the Fu transformation TR8 directly:

from sympy.simplify.fu import TR8
print(TR8(c))

yields the same result. The docstring, help(sys.modules['sympy.simplify.fu']) explains the transformations available. Here is the summary; check the docstring for more information:

TR0 - simplify expression
TR1 - sec-csc to cos-sin
TR2 - tan-cot to sin-cos ratio
TR2i - sin-cos ratio to tan
TR3 - angle canonicalization
TR4 - functions at special angles
TR5 - powers of sin to powers of cos
TR6 - powers of cos to powers of sin
TR7 - reduce cos power (increase angle)
TR8 - expand products of sin-cos to sums
TR9 - contract sums of sin-cos to products
TR10 - separate sin-cos arguments
TR10i - collect sin-cos arguments
TR11 - reduce double angles
TR12 - separate tan arguments
TR12i - collect tan arguments
TR13 - expand product of tan-cot
TRmorrie - prod(cos(x*2**i), (i, 0, k - 1)) -> sin(2**k*x)/(2**k*sin(x))
TR14 - factored powers of sin or cos to cos or sin power
TR15 - negative powers of sin to cot power
TR16 - negative powers of cos to tan power
TR22 - tan-cot powers to negative powers of sec-csc functions
TR111 - negative sin-cos-tan powers to csc-sec-cot
like image 90
unutbu Avatar answered Sep 28 '22 10:09

unutbu