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]])])
Answer
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]) *)
Comments
Post a Comment