# Implementing commands in the style of Factor to manipulate Trig functions.

What I would like to do is manipulate and simplify trig functions as they appear often in my calculations.

What I would like to do is to use the double angle identities.

Here is what I have implemented.

doublesin[Sin[function_]] := 2 Sin[#/2] Cos[#/2] &@ function
doublecos[Cos[function_]] := 1 - 2 Sin[#/2]^2 &@ function


And to some extent, it works fine, but it is limited.

Here it is,

In[278]:= doublesin[Sin[2 a]]

Out[278]= 2 Cos[a] Sin[a]

In[279]:= Sin[2 b] // doublesin

Out[279]= 2 Cos[b] Sin[b]

In[288]:= doublecos[Cos[4 c]]

Out[288]= 1 - 2 Sin[2 c]^2


And here is where and how it fails,

In[289]:= Cos[4 c] Sin[4 a] // doublesin // doublecos

Out[289]= doublecos[doublesin[Cos[4 c] Sin[4 a]]]

In[291]:= Cos[4 c] Sin[4 a] // doublecos

Out[291]= doublecos[Cos[4 c] Sin[4 a]]


In my expressions, I have things that look like $\cos(4x) \sin(6x) + \cos(8x) \sin(10x) + \cdots$

Ideally, I would like something that works like the Factor,Simplify, etc commands. Apply the commands at the end of a long expression and act on all trig functions, whether they sit alone or as a product with other trig functions.

• TrigExpand, TrigReduce, TrigToExp, TrigFactor? – Henrik Schumacher Feb 24 '18 at 18:12
• TrigToExp is not helpful for my purposes. TrigFactor and TrigReduce give trig functions with weird arguments. TrigExpand works fine, but the reason I want to implement these commands in a correct way, is to further reduce the trig function using power properties. – DiSp0sablE_H3r0 Feb 24 '18 at 18:17
• I am just trying to prevent you from reinventing the wheel, you know... – Henrik Schumacher Feb 24 '18 at 18:22
• Yes, I got it. I was just explaining what I wanted to do in general and why I want to implement something like that. – DiSp0sablE_H3r0 Feb 24 '18 at 18:33

Regardless of whether or not this is reinventing the wheel, a rule-based approach is probably the most productive here.

doublesin[f_] := f /. Sin[x_] :> 2 Sin[x/2] Cos[x/2];
doublecos[f_] := f /. Cos[x_] :> 1 - 2 Sin[x/2]^2;


This results in:

doublecos[doublesin[Cos[4 c] Sin[4 a]]]


2 (1 - 2 Sin[a]^2) Sin[2 a] (1 - 2 Sin[2 c]^2)

• Thank you for that. Very helpful. Cheers!!! – DiSp0sablE_H3r0 Feb 24 '18 at 20:50