Suppose I have a lot of expressions multiplied by factors such as:

$$e^{-i\theta[1]-i\theta[2] - i\theta[3]-i\theta[4]-i\theta[5]}$$

I would like to separate this into a product of exponentials of the form


before employing the function ExpToTrig and making substitutions to the result trigonometric functions.

However, since I plan to apply the tangent half angle substitution (cf. my previous question Simplifying Expressions for FindMinimum), I would like the arguments to involve only one variable at a time. In particular, I tried using ComplexExpand on the function to express the trigonometric functions as functions of a single variable, but it expands the entire function out.

In short, I would like to keep the simplified form, but want to expand the exponential as per the above without having to expand the entire expression.

For reference, here is my function

(E^(-I θ[1] - I θ[2] - I θ[3] - I θ[4] - I (θ[5] - θ[6]))
Abs[Sin[ϕ[6]]]^2 (1 - E^(I (θ[1] - θ[6]))
   Cot[ϕ[6]/2] Tan[ϕ[1]/2]) (Cos[θ[1]] + I Sin[θ[1]] + E^(I θ[2])
   Tan[ϕ[1]/2] Tan[ϕ[2]/2]) (Cos[θ[2]] + I Sin[θ[2]] + E^(I θ[3])
   Tan[ϕ[2]/2] Tan[ϕ[3]/2]) (Cos[θ[3]] + I Sin[θ[3]] + E^(I θ[4])
   Tan[ϕ[3]/2] Tan[ϕ[4]/2]) (Cos[θ[5] - θ[6]] + I Sin[θ[5] - θ[6]] - Cot[ϕ[6]/2] 
   Tan[ϕ[5]/2]) (Cos[θ[4]] + I Sin[θ[4]] + E^(I θ[5])
   Tan[ϕ[4]/2] Tan[ϕ[5]/2]))/
(2 Sqrt[(1 + Abs[Tan[ϕ[1]/2]]^2) (1 + Abs[Tan[ϕ[2]/2]]^2)]
   Sqrt[(1 + Abs[Tan[ϕ[2]/2]]^2) (1 + Abs[Tan[ϕ[3]/2]]^2)]
   Sqrt[(1 + Abs[Tan[ϕ[3]/2]]^2) (1 + Abs[Tan[ϕ[4]/2]]^2)]
   Sqrt[(1 + Abs[Tan[ϕ[4]/2]]^2) (1 + Abs[Tan[ϕ[5]/2]]^2)]
   Sqrt[(1 + Abs[Tan[ϕ[1]/2]]^2) (1 + Cos[ϕ[6]])]
   Sqrt[(1 + Abs[Tan[ϕ[5]/2]]^2) (1 + Cos[ϕ[6]])])
  • $\begingroup$ As you can see by entering E^a E^b, Mathematica automatically translates those into E^(a+b). Thus even if you transform the result back into E^a E^b Mathematica will immediately put it back. It is possible to stop this, but perhaps not simply and conveniently. $\endgroup$
    – Bill
    Aug 6, 2015 at 18:57
  • $\begingroup$ Possibly you can get the desired effect by doing TrigExpand[ExpToTrig[...]]. $\endgroup$ Aug 6, 2015 at 23:22
  • $\begingroup$ Possible duplicate of mathematica.stackexchange.com/q/60761/41148 $\endgroup$
    – divenex
    Jan 15, 2021 at 12:21

1 Answer 1



In the interest of simplifying the code somewhat, I've modified one of the replacements. For instance, we can do

expr2 = Thread[expr1, Plus] /. Plus -> Times


epxr2 = expr1 /. expT[Plus[a__]] :> Times @@ expT /@ a

rather than

expr2 = expr1 //. {expT[a_ + b_] :> expT[a] expT[b]}


f[expr_] := Thread[expr /. Power[E, a_] :> expT@Expand@a, Plus] /. Plus -> Times /. expT[a_] :> ExpToTrig@Exp@a


f[expr_] := expr /. Power[E, a_] :> expT@Expand@a /. expT[Plus[a__]] :> Times @@ expT /@ a /. expT[a_] :> ExpToTrig@Exp@a

Original Post

As Bill commented, Mathematica likes to keep Exp[]'s together. Here's a workaround that I've used in the past. We replace Exp with a dummy head expT, do the re-write using replacement rules, and in the process apply ExpToTrig.

For instance, if

expr = Exp[-I (4 + a) + c];

we first do

expr1 = expr /. Power[E, a_] :> expT@Expand@a
(* expT[-4 I - I a + c] *)

Then, we separate the terms inside expT using ReplaceRepeated:

expr2 = expr1 //. {expT[a_ + b_] :> expT[a] expT[b]}
(* expT[-4 I] expT[-I a] expT[c] *)

Finally, we convert back to Exp and apply ExpToTrig:

expr2 /. expT[a_] :> ExpToTrig@Exp@a
(* (Cos[4] - I Sin[4]) (Cos[a] - I Sin[a]) (Cosh[c] + Sinh[c]) *)

We can do all at once, of course. Define

f[expr_] := expr /. Power[E, a_] :> expT@a //. {expT[a_ + b_] :> expT[a] expT[b]} /. expT[a_] :> ExpToTrig@Exp@a

in which case

(* (Cos[4] - I Sin[4]) (Cos[a] - I Sin[a]) (Cosh[c] + Sinh[c]) *)
  • $\begingroup$ Thanks! Just one more thing. Is there a way to apply this function on to the above expression in a consistent way? When I apply it directly it still returns trigonometric functions as functions of sums of variables, and when I try to use the mapping method: expr/.Exp[z_]->f[Exp[z]], it also does not work. Is there a way to apply this function to turn the expression above into one purely in terms of trigonometric functions of single variables without having to expand? $\endgroup$
    – user238194
    Aug 6, 2015 at 21:30
  • 1
    $\begingroup$ One way is to take the first term and re-write it as E^(-I (\[Theta][1] + \[Theta][2] + \[Theta][3] + \[Theta][ 4] + \[Theta][5] - \[Theta][6])). Then in the first step use expr1 = expr /. Power[E, Times[Complex[0, -1], a_]] :> expT@a. This removes the imaginary number. Stick it back in step 3. expr3 = expr2 /. expT[a_] :> ExpToTrig@Exp@(I a) $\endgroup$ Aug 6, 2015 at 21:49
  • $\begingroup$ @user238194. I think we just need to apply Expand. See the updated answer. $\endgroup$
    – march
    Aug 6, 2015 at 22:27
  • $\begingroup$ @march That works and doesn't require any manual intervention. Very nice piece of work. $\endgroup$ Aug 6, 2015 at 22:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.