simplification of abs



I'm surprised that log(-1) doesn't simplify to %pi, even with
domain:complex.

Is this because someone is trying to preserve the multiple-valuedness?  But
we don't preserve multiple-valuedness  in many other cases, e.g. sqrt(-1),
asin(1), or for that matter log(%e).

And we have the weird situation that log(exp(%i*a)) => %i*a, but
log(exp(%i*%pi)) => log(-1) (not %i*%pi).

               -s

On Tue, Sep 28, 2010 at 11:45, Barton Willis <willisb at unk.edu> wrote:

> I checked in a revised simpabs; examples
>
> OK--nounform for abs(log(x))
>
>  (%i21) abs(log(x));
>  (%o21)  abs(log(x))
>
> OK, but %pi would be better:
>
>  (%i22) subst(x=-1,%);
>  (%o22) abs(log(- 1))
>
> Not wrong, but nonideal :(
>
>  (%i23) rectform(%);
>  (%o23) abs(log(- 1))
>
> Well, map rectform does it (should this really be required?)
>
>  (%i24) map(rectform,%);
>  (%o24) %pi
>
> Much better:
>
>  (%i25) declare(z,complex);
>  (%o25) done
>
>  (%i26) abs(log(-z));
>  (%o26)  abs(log(- z))
>
> Better--previously was 2 * %pi
>
>  (%i27) subst(z=-1,%);
>  (%o27)   0
>
> The testsuite and share testsuite run OK--(fixed only a few minor
> regressions).
> I thank Dieter for helping me with all this.
>
> --Barton
>
> maxima-bounces at math.utexas.edu wrote on 09/24/2010 03:28:17 PM:
>
>
> >
> > Am Freitag, den 24.09.2010, 15:00 -0500 schrieb Barton Willis:
> > > I think the general simplifier for abs does some things that it
> > shouldn't. Example:
> > >
> > >  (%i1) abs(log(x));
> > >  (%o1) sqrt(log(abs(x))^2+atan2(0,x)^2)
> > >
> > > Surely, (%o1) causes trouble for limit, integrate, solve, ...
> > Another problem with (%o1) is
> > >
> > >  (%i2) subst(x=%i,%);
> > >  (%o2) sqrt(atan2(0,%i)^2)
> > >
> > > Rectform and related functions will *not* simplify %o2 to %pi/2.
> > Changing log to plog and all is well:
> > >
> > >  (%i4) abs(plog(x));
> > >  (%o4) abs(plog(x))
> > >
> > >  (%i5) subst(x=%i,%);
> > >  (%o5) %pi/2
> > >
> > > A related bug (maybe this is more of a problem with carg, not abs)
> > >
> > >  (%i6) declare(z,complex);
> > >  (%o6) done
> > >
> > >  (%i7) abs(log(-z));
> > >  (%o7) sqrt(log(abs(z))^2+(carg(z)+%pi)^2)
> > >
> > > Wrong: Should be 0, not 2 pi:
> > >
> > >  (%i8) subst(z=-1,%);
> > >  (%o8) 2*%pi
> > >
> > >  (%i9) abs(log(1));
> > >  (%o9) 0
> >
> > Yes, the problem is that we call the function cabs in the simplifier of
> > abs. cabs is called every time an expression seems to be complex. The
> > call of cabs is present since the initial revision of Maxima. Older
> > versions have not the reported problems, but we have improved other code
> > of Maxima to handle complex expressions more completely. This causes now
> > the problems with the abs function, because Maxima has more knowledge
> > about expressions and functions which are complex, e.g.
> >
> > (%i1) csign(log(x));
> > (%o1) complex
> >
> > but
> >
> > (%i2) csign(plog(x));
> > (%o2) pnz
> >
> > We have to redesign the function abs without a call of cabs to get the
> > desired results.
> >
> > Dieter Kaiser
> >
> > _______________________________________________
> > Maxima mailing list
> > Maxima at math.utexas.edu
> > http://www.math.utexas.edu/mailman/listinfo/maxima
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>