[Numpy-discussion] arctan2 with complex args

David Goldsmith David.L.Goldsmith@noaa....
Mon Apr 30 09:01:03 CDT 2007

lorenzo bolla wrote:
> me!
> I have two cases.
>    1. I need that arctan2(1+0.00000001j,1-0.000001j) gives something
>       close to arctan2(1,1): any decent analytic prolungation will do!
This is the foreseeable use case described by Anne.

In any event, I stand not only corrected, but embarrassed (for numpy):

    Python 2.5 (r25:51918, Sep 19 2006, 08:49:13)
    [GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
     >>> import numpy as N
     >>> complex(0,1)
     >>> N.arctan(1)
     >>> N.arctan(complex(0,1))
    Warning: invalid value encountered in arctan

I agree that arctan should be implemented for _at least_ *one* complex 

>    1. if someone of you is familiar with electromagnetic problems, in
>       particular with Snell's law, will recognize that in case of
>       total internal reflection
>       <http://en.wikipedia.org/wiki/Total_internal_reflection> the
>       wavevector tangential to the interface is real, while the normal
>       one is purely imaginary: hence the angle of diffraction is still
>       given by arctan2(k_tangent, k_normal), that, as in Matlab or
>       Octave, should give pi/2 (that physically means no propagation
>       -- total internal reflection, as said).
> L.
> On 4/30/07, *Anne Archibald* <peridot.faceted@gmail.com 
> <mailto:peridot.faceted@gmail.com>> wrote:
>     On 29/04/07, David Goldsmith <David.L.Goldsmith@noaa.gov
>     <mailto:David.L.Goldsmith@noaa.gov>> wrote:
>     > Far be it from me to challenge the mighty Wolfram, but I'm not
>     sure that
>     > using the *formula* for calculating the arctan of a *single*
>     complex
>     > argument from its real and imaginary parts makes any sense if x
>     and/or y
>     > are themselves complex (in particular, does Lim(formula), as the
>     > imaginary part of complex x and/or y approaches zero, approach
>     > arctan2(realpart(x), realpart(y)?) - without going to the trouble to
>     > determine it one way or another, I'd be surprised if "their"
>     > continuation of the arctan2 function from RxR to CxC is (a. e.)
>     > continuous (not that I know for sure that "mine" is...).
>     Well, yes, in fact, theirs is continuous, and in fact analytic, except
>     along the branch cuts (which they describe). Formulas almost always
>     yield continuous functions apart from easy-to-recognize cases. (This
>     can be made into a specific theorem if you're determined.)
>     Their formula is a pretty reasonable choice, given that it's not at
>     all clear what arctan2 should mean for complex arguments. But for
>     numpy it's tempting to simply throw an exception (which would catch
>     quite a few programmer errors that would otherwise manifest as
>     nonsense numbers). Still, I suppose defining it on the complex
>     numbers
>     in a way that is continuous close to the real plane allows people to
>     put in almost-real complex numbers and get out pretty much the answer
>     they expect. Does anyone have an application for which they need
>     arctan2 of, say, (1+i,1-i)?
>     Anne
>     _______________________________________________
>     Numpy-discussion mailing list
>     Numpy-discussion@scipy.org <mailto:Numpy-discussion@scipy.org>
>     http://projects.scipy.org/mailman/listinfo/numpy-discussion
> ------------------------------------------------------------------------
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion

More information about the Numpy-discussion mailing list