Note on pseries::power_const() method.
Pearu Peterson
pearu at cens.ioc.ee
Wed Nov 28 19:42:12 CET 2001
On Wed, 28 Nov 2001, Richard B. Kreckel wrote:
> > If p==pseries(...) and n is integer, then deg in p.power_const(n,deg) is
> > found as follows
> > ldeg = abs(n * p.ldegree(p.get_var()))
> > deg = abs(n * p.degree(p.get_var()))
> > deg = max(ldeg,deg) + 2
> > With this rule, I have found that equation
> > (p^n)^m == p^(n*m) for all integers m,n (also negative).
> > holds (and therefore seems sensible to me).
> >
> > Do you see any faults in this rule?
>
> The rule itself look very interesting. I think I shall play with it
> when I find time...
>
> ...however, why are you calling pseries::power_const() and all this? It
> should only be called from within power::series() and if you look there
> you will see that the second argument is just passed along. Err, maybe
> pseries::power_const shouldn't have been public in the first place. :^)
I used pseries::power_const() to find the result of
p ^ n
where p is a pseries object. But now I see that I could use
power::series() for that (and applying my rule by default).
Do you think that it could be a default behaviour for power (and
other) operation in GiNaC? Are there reasons to keep arithmetic operations
with power series "lazy"? That is, to find out, say, `p+1', one needs to
call series(x==x0,order) method explicitly (and therefore this can be a
source for bugs if the programmer makes a typo in specifying the right
x0)?
Nevertheless, it's fine for me if you protect
pseries::power_const() method (sofar I have assumed that public methods
are public). However, now I find that
>>> p=((x+2)**4).expand().series(x==2,3)
>>> (p**2).series(x==2,4)
65536+131072*(-2+x)+114688*(-2+x)**2+Order((-2+x)**3)
>>> ((p+1)**2).series(x==2,4)
66049+131584*(-2+x)+114880*(-2+x)**2+49152*(-2+x)**3+Order((-2+x)**4)
which is really odd (though it can easily be a bug in pyginac...).
Regards,
Pearu
More information about the GiNaC-devel
mailing list