[GiNaC-list] conjugates of power objects

Burcin Erocal burcin at erocal.org
Thu May 6 05:16:01 CEST 2010


Hi,

I attached a patch with my attempts to solve this problem. It is based
on the latest version of pynac. I hope it applies cleanly to GiNaC as
well.

On Mon, 3 May 2010 17:50:44 +0200
Burcin Erocal <burcin at erocal.org> wrote:

> On Fri, 30 Apr 2010 09:06:03 +0200
> "Richard B. Kreckel" <kreckel at ginac.de> wrote:
> > Alas, I think that automatic evaluation of conjugation is too
> > aggressive in GiNaC. It just keeps giving incorrect results on
> > branch cuts. Here are some examples, using ginsh:
> > 
> >  > conjugate(sqrt(x));
> > sqrt(conjugate(x))
> >  > conjugate(sqrt(x))-sqrt(conjugate(x));
> > 0
> >  > conjugate(sqrt(-1))-sqrt(conjugate(-1));
> > -2*I
> >  > conjugate(log(x));
> > log(conjugate(x))
> >  > conjugate(log(x))-log(conjugate(x));
> > 0
> >  > conjugate(log(-1))-log(conjugate(-1));
> > -(2*I)*Pi
> > 
> > I suggest to disable automatic evaluateion of conjugation where
> > these kinds of problems can appear.
> >
> > Opinions?
> 
> I agree that the automatic evaluation should be disabled for most
> cases. I don't immediately see a good definition for these cases
> though, but then I am not knowledgeable in this area at all.

For some time now, pynac doesn't automatically evaluate conjugates of
function objects:

http://pynac.sagemath.org/hg/rev/4c0f8441d460

This prevents the problems with log() above.

> Maple seems to convert sqrt(-3) to sqrt(3)*I automatically:
> 
> > sqrt(-3);
>                                      1/2
>                                     3    I
> 
> Perhaps adding this automatic evaluation rule for power objects would
> simplify the conditions we need to consider for automatic evaluation
> of conjugation.

Attached patch adds a rule to power::eval() to transform ^(-c1, c2) to
*(^(-1, c2), (c1, c2)) when c1 and c2 are both rational. I got this
idea from maxima. I also restrict the automatic conjugation unless the
basis is real and the exponent is a rational, returning *this in this
case.

This seems to give an acceptable response to conjugate(sqrt(-3)):

sage: conjugate(sqrt(-3))
-I*sqrt(3)


Comments?


Cheers,
Burcin


-------------- next part --------------
A non-text attachment was scrubbed...
Name: conjugate.patch
Type: text/x-patch
Size: 1511 bytes
Desc: not available
URL: <http://www.cebix.net/pipermail/ginac-list/attachments/20100506/2d473a1e/attachment.patch>


More information about the GiNaC-list mailing list