Programming Options for Power Expand
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg802] Programming Options for Power Expand
- From: Jack Goldberg <jackgold at math.lsa.umich.edu>
- Date: Fri, 21 Apr 1995 01:41:22 -0400
I have received a number (1) of requests for my solution
to my own problem: Enhance PowerExpand so that among
other things it simplifies ArcTan[Tan[x]] = x. The
real question is more general: Should (and can!) one
add options to a built in command? I do not know the
answer to whether one should. I am interested in knowing
what is good Mma programming practice in this regard.
Is what I present next poor programming practice? Why?
(I am most interested in the style, less in how to improve
my code.)
Step(1):
Define rules. I list a few:
In[1]: ArcRules = {
ArcTan[ Tan[x_] ] :> x,
ArcTan[ Cot[x_] ] :> Pi/2 - x,
....
ArcCsc[ Sec[x_] ] :> Pi/2 - z}:
The .... refers to all those combinations ArcYyy[ [Yyy[x_] ] :> x
which I left out to save space.
Step(2)
In[2}: ArcRules = Dispatch[ArcRules];
( *Don't ask me to justify this step. I just lifted it out of
Roman Maeder's package "Algebra`Trigonometry`". *)
Step (3)
In[3]: Unprotect[PowerExpand];
In[4]: PowerExpand[expr_,InverseTrig->True] :=
Module[ {fnt},
fnt = Simplify[ PowerExpand[#//.ArcRules] ]&;
FixedPoint[ fnt,expr ]
]
In[5]: Protect[PowerExpand];
Some trial examples:
ex1 = 1 + Log[ArcTan[Tan[Exp[x]]]];
ex2 = 1 + ArcTan[Log[Exp[Tan[x]]]];
ex3 = ArcSin[Sqrt[1-Cos[x]^2]];
PowerExpand without the "option" leave these expressions unaltered.
PowerExpand[ex1,InverseTrig->True] simplifies to 1+x. The others
work similarly.
I think that I have cheated here. InverseTrig->True acts like
an option but it strikes me that it is in fact a second argument
to PowerExpand. But perhaps that's all options are anyway.
Any discussion on the matters raised by this post are appreciated.
I learn even from those I disagree with!
Thanks all.
Jack
P.S. I hope I made it clear that other rules such as
ArcTanh[ Tanh[x_] ] :> x can be added to the list in
ArcRules at your whim.