Page 1 sur 1

Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 9:13 am
par cassepieds
Bonjour.
Sur le fil "Problèmes avec les polynômes", alb m'a indiqué ce programme pour calculer certains polynômes définis par récurrence :

Polynomes(n):={
local P,k;
P:=1;
pour k de 3 jusque n faire
P:=diff(P*(x^2+x));
fpour
retourne normal(P)
}:;

à faire suivre de la commande :
seq([n,Polynomes(n)],n,3,7)

(J'ai changé la numérotation des polynômes.)

Cela marche comme souhaité. Cependant, quand je calculerai ainsi certains polynômes définis par récurrence, je n'aurai besoin de connaître leurs coefficients que modulo un certain nombre premier. Comme ces coefficients, non réduits modulo, deviennent vite astronomiques, je suppose que je ferai gagner du temps et de la mémoire au programme en lui faisant faire tous les calculs modulo ce nombre premier.

En ligne de commande, ceci réussit :

P:=x%11
1%11x

normal(P*((x^2+x)%11) )
1%11x3+1%11x2

mais le programme suivant, où j'ai simplement essayé de remplacer les polynômes par leurs réduits modulo 11 dans le programme d'alb ci-dessus, ne réussit pas :

Polynomes(n):={
local P,k;
P:=1%11;
pour k de 3 jusque n faire
P:=diff(P*((x^2+x)%11));
fpour
retourne normal(P)
}:;

Si après ce programme (qui renvoie "Done"), on tape la commande

seq([n,Polynomes(n)],n,3,7)

on reçoit une liste de polynômes dont les coefficients sont écrits sous forme décimale et ne correspondent pas aux valeurs attendues.

Ce programme-ci ne réussit pas non plus, il donne le même résultat :

Polynomes(n):={
local P,k;
P:=1%11;
pour k de 3 jusque n faire
P:=diff(P*(1%11 x^2 + 1%11 x));
fpour
retourne normal(P)
}:;

Quelqu'un peut-il m'aider ? Merci d'avance.
C.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 9:41 am
par alb
la reponse est dans l'aide detaillee de Xcas

Code : Tout sélectionner

Polynomes(n):={
  local P,k;
  P:=1;
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
  fpour
  retourne normal(P)
}:;

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 10:10 am
par cassepieds
alb a écrit :la reponse est dans l'aide detaillee de Xcas

Code : Tout sélectionner

Polynomes(n):={
  local P,k;
  P:=1;
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
  fpour
  retourne normal(P)
}:;
Merci, mais si je fais suivre ce programme de la commande
seq([n,Polynomes(n)],n,3,7)
je reçois "NaN". Faut-il une autre commande ?
C.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 10:16 am
par alb
tu gagnerais du temps en installant Xcas.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 10:18 am
par alb
sur Xcas seq([n,Polynomes(n)],n,3,100) s'affiche en 1 seconde

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 10:22 am
par cassepieds
alb a écrit :sur Xcas seq([n,Polynomes(n)],n,3,100) s'affiche en 1 seconde
Bon, Xcas en ligne, c'était trop beau, semble-t-il...
C.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 12:04 pm
par alb
sur Xcas en ligne:

Code : Tout sélectionner

Polynomes(n):={
  local P,k,temp;
  P:=1;
  pour k de 3 jusque n faire
    temp:=diff(P*(x^2+x));
    P:=irem(symb2poly(temp),11);
    P:=poly2symb(P);
  fpour
  retourne normal(P)
}:;

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 1:35 pm
par cassepieds
alb a écrit :sur Xcas en ligne:

Code : Tout sélectionner

Polynomes(n):={
  local P,k,temp;
  P:=1;
  pour k de 3 jusque n faire
    temp:=diff(P*(x^2+x));
    P:=irem(symb2poly(temp),11);
    P:=poly2symb(P);
  fpour
  retourne normal(P)
}:;
Merci beaucoup !
C.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 1:36 pm
par parisse
seq([n,Polynomes(n)],n,3,7) % 0 marche plutot bien.
Ceci dit il vaudrait mieux modifier Polynomes(n) pour renvoyer directement la liste de listes souhaitee, car sinon on recalcule plusieurs fois les premiers polynomes.

Code : Tout sélectionner

Polynomes(n):={
local P,k,l;
P:=1%11;
l:=[[2,P % 0]];
pour k de 3 jusque n faire
P:=diff(P*((x^2+x)%11));
l:=append(l,[k,P % 0]);
fpour
return l;
}:;
Pour utiliser Xcas sur le web sans perdre trop en vitesse, vous pouvez utiliser le lien suivant
http://www-fourier.ujf-grenoble.fr/~par ... casfr.html
Chez moi, Polynomes(10) renvoie la liste en environ 1/10eme de seconde.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 3:19 pm
par alb
en principe oui.
Du coup je ne comprends pas cette difference:

Code : Tout sélectionner

Polynomes(n):={
  local P,k;
  P:=1;
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
  fpour
  retourne normal(P)
}:;
seq([n,Polynomes(n)],n,3,200) // en 4.24 s

Code : Tout sélectionner

Polynomes(n):={
local P,k,l;
P:=1%11;
l:=[[2,P % 0]];
pour k de 3 jusque n faire
P:=diff(P*((x^2+x)%11));
l:=append(l,[k,P % 0]);
fpour
return l;
}:;
Polynomes(12) // en 5.93 s  et impossible d'avoir Polynomes(20)

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 5:34 pm
par parisse
Dans le 2ème cas, le polynome P n'est pas normalisé dans la boucle, il reste sous forme d'un produit de plus en plus compliqué à dériver, alors que P % 0 force la normalisation.

Re: Polynômes réduits modulo

Publié : jeu. avr. 23, 2015 7:41 pm
par alb
d'accord, on peut donc faire:

Code : Tout sélectionner

Polynomes(n):={
  local P,k,l;
  P:=1%11;
  l:=[[2,P % 0]];
  pour k de 3 jusque n faire
    P:=(diff(P*(x^2+x))%11)%0;
    l:=append(l,[k,P]);
  fpour
  return l;
}:;
Polynomes(100) // affiche en 0.024 s
Polynomes(5000):; // realise en moins de 3 s