Joerg Arndt on Mon, 10 Apr 2006 12:17:05 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Pol problem (bug?)


* Karim Belabas <Karim.Belabas@math.u-bordeaux1.fr> [Apr 10. 2006 11:50]:
> * Joerg Arndt [2006-04-09 11:27]:
> > I do not see a system here:
> > 
> > ? Pol([a,b,c])
> > a*x^2 + b*x + c
> > ? Pol([a,b,c],d)
> > a*d^2 + b*d + c
> > ? Pol([a,b,c],x)
> > a*x^2 + b*x + c
> > ? Pol([a,x,c])
> > a*x^2 + x*x + c
> > ? Pol([a,x,c],'x)
> > a*x^2 + x*x + c
> > 
> > ? Pol([a,x,c],'x_)
> >   *** Pol: main variable has highest priority in gtopoly.
> > ? Pol([a,x,c],'a_)
> >   *** Pol: main variable has highest priority in gtopoly.
> > ? Pol([a,x,c],'z_)
> >   *** Pol: main variable has highest priority in gtopoly.
> 
> I have reworded the error message and fixed an off-by-1 problem. The
> correct behaviour (current CVS, clean session) is

Fine, thanks.


> 
> ? Pol([a,b,c])
> %1 = a*x^2 + b*x + c
> ? Pol([a,b,c],d)
>   *** Pol: variable must have higher priority in gtopoly.
> ? Pol([a,b,c],x)
> %2 = a*x^2 + b*x + c
> ?  Pol([a,x,c])
>   *** Pol: variable must have higher priority in gtopoly.
> ? Pol([a,x,c],'x)
>   *** Pol: variable must have higher priority in gtopoly.
> ? Pol([a,x,c],'x_)
>   *** Pol: variable must have higher priority in gtopoly.
> ? Pol([a,x,c],'a_)
>   *** Pol: variable must have higher priority in gtopoly.
> ? Pol([a,x,c],'z_)
>   *** Pol: variable must have higher priority in gtopoly.
> 
> > what is a "main variable"?
> 
> (09:38) gp > ??Pol
> Pol(x,{v = x}):
> 
>    transforms the object x into a polynomial with main variable v. [...]
>    Warning: this is not a substitution function.   It will not transform an
> object containing variables of higher priority than v.
> 
>    ? Pol(x + y, y)
>      *** Pol: variable must have higher priority in gtopoly.
> 
> See also Section 2.5.4 (p. 39, current CVS) of the User's manual, on
> "Variable priorities, multivariate objects"

I'll do that.


> 
> > There does not seem to be a workaround.
> 
> There might be. What are you trying to achieve ?

I compute recurrences via modular polynomial exponentiation,
see http://www.jjj.de/pari/fastrec.inc.gp

The (topmost) function vec2charpol() used by frec() (bottom
of file) fails sometimes with symbolic recursions, e.g.
when trying to compute Fibonacci polynomials.

? frec([1,x],[2*x,-1],3)
  *** Pol: main variable has highest priority in gtopoly.
? frec([1,a],[2*a,-1],3)
time = 0 ms.
[4*a^3 - 3*a, 8*a^4 - 8*a^2 + 1]

? a=33;
? N=100000;

? f=frec([1,a],[2*a,-1],N)[1];
time = 46 ms.
\\ same does not work with builtin:
? t=subst(poltchebi(N,x),x,a);
  *** poltchebi: the PARI stack overflows !
  current stack size: 256000000 (244.141 Mbytes)
  [hint] you can increase GP stack with allocatemem()

The frec() function allows to compute term of general
(linear, homogeneous) recurrences very fast.

Compare to the builtin fibonacci():
? n=1000000;
? f=frec([0,1],[1,1],n)[1];
time = 57 ms.
? t=fibonacci(n);
time = 38 ms.
? t-f
0

... but you get any order:
? f=frec([0,0,0,1],[1,1,1,1],n)[1];
time = 352 ms.


> 
> Cheers,
> 
>     K.B.
> -- 
> Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
> Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
> 351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
> F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]

All the best,
     jj

P.S.:
my attempt for SVD: http://www.jjj.de/pari/matsvd.inc.gp
some hypergoemetric stuff: http://www.jjj.de/pari/hypergeom.inc.gp