5
$\begingroup$

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

$$e^{-i\theta[1]}e^{-i\theta[2]}...$$

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]])])
$\endgroup$
  • $\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 '15 at 18:57
  • $\begingroup$ Possibly you can get the desired effect by doing TrigExpand[ExpToTrig[...]]. $\endgroup$ – Daniel Lichtblau Aug 6 '15 at 23:22
8
$\begingroup$

Update

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

or

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

rather than

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

So:

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

or

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

f[expr]
(* (Cos[4] - I Sin[4]) (Cos[a] - I Sin[a]) (Cosh[c] + Sinh[c]) *)
$\endgroup$
  • $\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 '15 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$ – Jack LaVigne Aug 6 '15 at 21:49
  • $\begingroup$ @user238194. I think we just need to apply Expand. See the updated answer. $\endgroup$ – march Aug 6 '15 at 22:27
  • $\begingroup$ @march That works and doesn't require any manual intervention. Very nice piece of work. $\endgroup$ – Jack LaVigne Aug 6 '15 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.