In the line docstring help(sympy.fu) ,
fu will try to minimize the objective function measure . By default, this first minimizes the number of trigger terms, and then minimizes the amount of operation.
However, if you pass
measure=lambda x: -x.count_ops()
then fu will try to maximize the number of options .
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()))
gives
cos(\omega_LO*t - \omega_RF*t)/2 + cos(\omega_LO*t + \omega_RF*t)/2
Alternatively, you can directly invoke the Fu TR8 conversion :
from sympy.simplify.fu import TR8 print(TR8(c))
gives the same result. Dokshrin, help(sys.modules['sympy.simplify.fu']) explains the available conversions. Here is a summary; check the documentation 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
source share