MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Two Argument ArcTan Function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg43409] Re: Two Argument ArcTan Function
  • From: John Tanner <john at janacek.demon.co.uk>
  • Date: Tue, 16 Sep 2003 04:36:06 -0400 (EDT)
  • References: <bfrk3t$rcv$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In article <bfrk3t$rcv$1 at smc.vnet.net>, "Wolf, Hartmut" 
<Hartmut.Wolf at t-systems.com> writes
>
>>-----Original Message-----
>>From: David Park [mailto:djmp at earthlink.net]
To: mathgroup at smc.vnet.net
>>Sent: Friday, July 25, 2003 11:09 AM
>>To: mathgroup at smc.vnet.net
>>Subject: [mg43409]  Two Argument ArcTan Function
>>
>>
>>Dear MathGroup,
>>
>>The two argument function, ArcTan[x,y], is a very nice function and
>>Mathematica knows how to do a lot with it. But sometimes it is
>>difficult to
>>bring it into play without just typing it in.
>>
>>Consider the case of inverting polar coordinates.
>>
>>eqns = {x == r Cos[t], y == r Sin[t]};
>>Solve[eqns, {r, t}, {x, y} \[Element] Reals] // Simplify
>>
>>If we discard the two negative r solutions, we obtain two solutions
>>involving ArcCos. But couldn't we have a single solution using
>>ArcTan[x,y]?
>>I'm curious to know if there is a method to get Mathematica to
>>produce that
>>solution?
>>
>>David Park
>>djmp at earthlink.net
>>http://home.earthlink.net/~djmp/
>>
>>
>
>Dear David,
>
>if you have cartesian coordinates defined (symbolically) as
>
>In[1]:= {x, y} = r{ Cos[t], Sin[t]} ;
>
>then you may revert (symbolically) to polar with
>
>
>In[11]:=
>FullSimplify[{Sqrt[{x, y}.{x, y}], ArcTan[x, y]},
>  {Positive[r], t \[Element] Reals},
>  TransformationFunctions -> {Automatic, TrigToExp, PowerExpand}]
>
>Out[11]= {r, t}
>
>(It also works with assuption r \[Element] Reals (but I hate that).
>
>Of course numerical work is easier.
>
>--
>Hartmut
>
   -----------------------------------------------------------------------
---------------------------------
I think that it is easier to get results with Arg[] rather than ArcTan[] 
for an inverse function, so starting from something like Hartmut's case 
applied to simplification of the Solve[]:

In[5]:=Clear[x,y,r,t];
In[6]:=FullSimplify[
   Solve[eqns, {r, t}, {x, y} \[Element] Reals], {x, y} \[Element] Reals,
   TransformationFunctions -> {Automatic, ComplexExpand, PowerExpand}]

the neatest however should be when using Exp[] rather than Cos[] and 
Sin[], but I am annoyed that you have to supply redundant information 
(Solve[] does not recognise that a complex equation has 2 Real 
unknowns..) and with the remaining oddities in the result:

In[7]:=eqns2={x^2+y^2==r^2,x+I*y == r *Exp[I*t]};
In[8]:=FullSimplify[Solve[eqns2,{r,t},{x,y}\[Element]Reals],
   {x,y}\[Element]Reals,
   TransformationFunctions->{Automatic,ComplexExpand,PowerExpand}]

The inverse functions (Sqrt[] and Arg[]) are so simple that these 
subtleties only matter for much more complex expressions: this can be a 
real voyage of discovery!   The deepest darkest notes of Help for 
FullSimplify, ComplexExpand etc. give fascinating options even before 
resorting to specific pattern matching rules [oh I do love 
Mathematica..].  From the MathGroup archives, a good start point is "Re: 
 COMPLEXEXPAND" from Andrzej Kozlowski, 30/3/2000.  Using 
Andrej's function myComplexExpand[] as a transformation, the result of 
the evaluation looks just what you want:

In[9]:=myComplexExpand[z_] :=
   ComplexExpand[Abs[z], TargetFunctions -> {Re, Im}]*
     Exp[I*ComplexExpand[Arg[z], TargetFunctions -> {Re, Im}]]
In[10]:=myComplexExpand[x + I*y]
Out[10]:=Exp[I*ArcTan[x, y]]*Sqrt[x^2 + y^2]

To get inverse results from Solve with ArcTan[] directly in this case, 
unfortunately using myComplexExpand directly as a TransformationFunction 
did not work <<rats>>, but using the hints from Andrej and Hartmut my 
first imperfect result is:

In[11]:=FullSimplify[Solve[eqns,{r,t},{x,y}\[Element]Reals],
   {x,y}\[Element]Reals,
   TransformationFunctions->{Automatic,
       ComplexExpand[#,TargetFunctions->{Re,Im}]&,
       PowerExpand}]

Hopefully somebody can neaten up these examples a bit more, I thought 
this would be an easy one to link in to Solve[] but I was wrong.. 
fascinating.  Now to delve into the online help to see what more version 
5.0 has to offer..

-- 
   from -   John Tanner                 home -  john at janacek.demon.co.uk
   mantra - curse Microsoft, curse...   work -  john.tanner at baesystems.com
I hate this 'orrible computer,  I really ought to sell it:
It never does what I want,      but only what I tell it.


  • Prev by Date: Re: Pattern Matching Problem
  • Next by Date: problem with the cells in my last NDSolve error post ...
  • Previous by thread: Re: Creating Nested GridBoxes
  • Next by thread: problem with the cells in my last NDSolve error post ...