Re: Arg[z] that works with zero argument?
- To: mathgroup at smc.vnet.net
- Subject: [mg50907] Re: Arg[z] that works with zero argument?
- From: "David W. Cantrell" <DWCantrell at sigmaxi.org>
- Date: Mon, 27 Sep 2004 00:42:15 -0400 (EDT)
- References: <cj32c8$55k$1@smc.vnet.net> <cj62su$qnl$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
AES/newspost <siegman at stanford.edu> wrote:
> Yes, the problem is that if some of the elements in the argument list of
> Arg[z] are zeros, the "right thing" that the standard version of Arg
> does for those elements is to return some long string (forget exactly
> what it is).
It gives the interval [-Pi, Pi].
> If you then print the returned list in MatrixForm, these elements make
> all the columns involved become very wide. I'd like Arg[0] to just
> return 0, or maybe "*" or something like that, for those argument list
> elements that are themselves 0.
>
> And, you can't use some superficially plausible workaround like
>
> myArg[z_] := If[ Abs[z]==0, 0, Arg[z] ]
>
> because the initial test doesn't do what you want if z is a list.
Here are two different ways that work. Either use
myArg[z_] := Map[If[Abs[#] == 0, 0, Arg[#]] &, z]
which is in essence what you were attempting above, or use
myArg[z_] := Map[(Min[#] + Max[#])/2 &, Arg[z]]
Note that those solutions are very different in principle, and the latter
will complain about indeterminate expressions if the list contains zeros.
But either works. For example, given
myArg[{0, -1, I, 1 - 2*I, 0., 1.*^-15 + 1.*^-12*I}]
they both yield
{0, Pi, Pi/2, -ArcTan[2], 0, 1.5697963271282298}
David Cantrell