| Karim BELABAS on Mon, 1 Jul 2002 19:49:27 +0200 (MEST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: polcoeff() mystery |
On Mon, 1 Jul 2002, Ilya Zakharevich wrote:
> How polcoeff() is supposed to work? I try to understand why the
> coeff() example of the manual works, and fail... I try this:
>
> coeffs(P, nbvar) =
> {
> local(v);
>
> if (type(P) != "t_POL",
> for (i=0, nbvar-1, P = [P]);
> return (P)
> );
> v = vector(poldegree(P)+1, i, polcoeff(P,i-1));
> vector(length(v), i, coeffs(v[i], nbvar-1))
> }
>
> c(P) = coeffs(P,2)
>
> PP = x^2 + x*y + z;
> temp = polcoeff(PP,0);
> temp1 = polcoeff(PP,1);
> print("z -> "z", c(z) -> "c(z));
> print("temp -> "z", c(temp) -> "c(temp));
> print("y -> "y", c(y) -> "c(y));
> print("temp1 -> "temp1", c(temp) -> "c(temp1));
>
> This gives
>
> z -> z, c(z) -> [[0], [1]]
> temp -> z, c(temp) -> [[0, 1]]
> y -> y, c(y) -> [[0], [1]]
> temp1 -> y, c(temp) -> [[0], [1]]
>
> As one can see, z and temp have the same value,
No. They evaluate to the same printed output.
> but the results of c() are different! Moreover, x and temp give the same \x
They don't. The history objects obtained from x and temp give the same \x.
But, assuming factory settings, the history result is obtained after
simplify() has been applied to the result of the command evaluation. So
? temp = polcoeff(PP,0) \\ in R[z][y] (degree 0 in y)
%1 = z \\ in R[z] after simplification
? \x
[&=00a5d93c] POL(lg=4,CLONE):15000004 (+,varn=10,lgef=4):400a0004 00a5d958 00a5d94c
coef of degree 0 = [&=00a5d958] INT(lg=2):02000002 (0,lgef=2):00000002
coef of degree 1 = [&=00a5d94c] INT(lg=3):02000003 (+,lgef=3):40000003 00000001
? install(voir, "vGD,-1,L,") \\ library routine underlying \x
? voir(temp)
[&=00a5d58c] POL(lg=3,CLONE):15000003 (+,varn=9,lgef=3):40090003 00a5d5ac
coef of degree 0 = [&=00a5d5ac] POL(lg=4):14000004 (+,varn=10,lgef=4):400a0004 00a5d5a4 00a5d598
coef of degree 0 = [&=00a5d5a4] INT(lg=2):02000002 (0,lgef=2):00000002
coef of degree 1 = [&=00a5d598] INT(lg=3):02000003 (+,lgef=3):40000003 00000001
You have the same kind of weird problems with
? x = 2 + 0*I;
? factor(%)
%2 =
[2 1]
? factor(x)
*** can't factor 2. \\ huh ?
Type coercion is nearly inexistent in PARI, you have to force it with
simplify().
Cheers,
Karim.
--
Karim Belabas Tel: (+33) (0)1 69 15 57 48
Dép. de Mathematiques, Bat. 425 Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France) http://www.math.u-psud.fr/~belabas/
--
PARI/GP Home Page: http://www.parigp-home.de/