Simplifying atan expressions



But I asked about log(-%i), which should be pretty non-controversial.

If there is a switch for log, it should indicate what your favorite branch is: e.g., [-%pi,+%pi), [0,2*%pi), etc.

At 08:30 AM 2/21/2012, Stavros Macrakis wrote:
>Good question.  For that matter, log(-1) only simplifies to %i*%pi if lognegint = true (default is false).
>
>Here are the possible arguments I can think of for this behavior (I don't guarantee that they correspond to the original rationale...):
>
>1) log is multivalued, and the user may want to control whether log(-1) => %pi or -%pi etc.
>2) Maxima assumes the user is working in the real domain, so shouldn't introduce %i unless explicitly asked to.  But domain:complex doesn't change the behavior.
>3) log(-1) may appear as an intermediate result of a real calculation which goes away with simplification, e.g. logcontract(log(-1)+log(-x)), so why confuse matters?
>4) Once you have an expression like log(x)+%i*%pi, converting back to log(-x) is slightly tricky -- actually, simply log(exp(EXPR)) will do it, but there is no easy way to apply that globally, like logcontract.
>
>I suspect that 3 and 4 are the most important.
>
>So perhaps the default is OK, but log(-C) and log(%i*C) should expand out when domain=complex or logexpand=ultra.  Conversely, perhaps there should be a logconmode=all which contracts things like log(x)+C so that arguments 3 and 4 go away....
>
>Thoughts?
>
>               -s
>
>On Mon, Feb 20, 2012 at 23:38, Henry Baker <hbaker1 at pipeline.com> wrote:
>How come log(-%i) doesn't already simplify by itself, instead of requiring rectform to do it?
>
>Is there some switch that Maxima uses to force log(constant) to simplify if it can?
>
>At 01:12 PM 2/20/2012, Stavros Macrakis wrote:
>>Henry,
>>
>>Yes, this derivation is essentially the same as the bottomup rectform.  In fact:
>>
>>    expr: logcontract(logarc(4*atan(1/5)-atan(1/239)));
>>    rectform(substpart(e1:rectform(piece),expr,1,2,1))  => %pi/4
>>
>>You'll see that e1 here is -%i.
>>
>>What rectform does internally by default looks more like
>>
>>    rectform(substpart(e2:polarform(piece),expr,1,2,1));
>>
>>where e2 isn't at all helpful.
>>
>>I agree that most mathematical functions (sin, etc.) and form-changing routines (factor etc.) should distribute over "=".
>>
>>           -s
>>
>>On Mon, Feb 20, 2012 at 15:45, Henry Baker <hbaker1 at pipeline.com> wrote:
>>result=4*atan(1/5)-atan(1/239);
>>                                       1          1
>>(%o1)                   result = 4 atan(-) - atan(---)
>>                                       5         239
>>(%i2) lhs(%)=logcontract(logarc(rhs(%)));
>>                                             4
>>                                     (%i - 5)  (%i + 239)
>>                            %i log(- --------------------)
>>                                                        4
>>                                     (%i - 239) (%i + 5)
>>(%o2)               result = ------------------------------
>>                                          2
>>(%i3) %*2/%i;
>>                                               4
>>                                       (%i - 5)  (%i + 239)
>>(%o3)             - 2 %i result = log(- --------------------)
>>                                                          4
>>                                       (%i - 239) (%i + 5)
>>(%i4) exp(lhs(%))=exp(rhs(%));
>>                                              4
>>                    - 2 %i result     (%i - 5)  (%i + 239)
>>(%o4)              %e              = - --------------------
>>                                                         4
>>                                      (%i - 239) (%i + 5)
>>(%i5) lhs(%)=rectform(rhs(%));
>>                             - 2 %i result
>>(%o5)                       %e              = - %i
>>(%i6) log(lhs(%))=log(rhs(%));
>>(%o6)                      - 2 %i result = log(- %i)
>>(%i7) rectform(lhs(%))=rectform(rhs(%));
>>                                            %i %pi
>>(%o7)                      - 2 %i result = - ------
>>                                              2
>>(%i8) solve(%,result);
>>                                         %pi
>>(%o8)                           [result = ---]
>>                                          4
>>
>>This example shows why rectform, log, exp, logcontract, logarc, etc., should distribute over "=".
>>
>>At 11:20 AM 2/20/2012, Stavros Macrakis wrote:
>>>Consider the expression 4*atan(1/5)-atan(1/239) (Machin's formula).
>>>
>>>How can we use Maxima to simplify it to %pi/4?
>>>
>>>Well, here's one approach:
>>>
>>>atan(trigexpand(trigexpand(tan(ex))))
>>>
>>>And here's another way that doesn't depend on trig identities:
>>>
>>>(%i1) ex:4*atan(1/5)-atan(1/239);
>>>(%o1) 4*atan(1/5)-atan(1/239)
>>>(%i2) llex: logcontract(logarc(ex));
>>>(%o2) %i*log(-(%i-5)^4*(%i+239)/((%i-239)*(%i+5)^4))/2
>>>(%i3) rectform(llex);
>>>(%o3) (atan(sin(4*atan(1/5))/cos(4*atan(1/5)))-atan(sin(4*(%pi-atan(1/5)))/cos(4*(%pi-atan(1/5))))-2*atan(1/239))/2
>>>        <<< oops, not so helpful
>>>(%i4) scanmap(rectform,llex,bottomup);
>>>        <<< but reorganizing the rectform calculation gives a better result
>>>        <<< makes me think that rectform could be improved...
>>>(%o4) %pi/4
>>>
>>>Are any of these techniques packaged into some analog of trigsimp?
>>>
>>>                -s